2008-11-23 19 views
11

Estoy haciendo un formulario simple para crear encuestas, por lo tanto, quiero la posibilidad de agregar campos de entrada adicionales en caso de que el usuario quiera más opciones en la encuesta.Enviar campos de entrada de formulario agregados con javascript

He hecho un código Javascript que agrega un nuevo campo de entrada al formulario, pero los campos de entrada añadidos dinámicamente no se publican cuando se envía el formulario (utilizo un botón de envío estándar).

¿Hay alguna manera de publicar/reconocer los campos agregados dinámicamente como parte del formulario?

<form id="myForm" method="post"> 
    <input type="submit"> 
    <input type="text" name="poll[question]"> 
    <input type="text" name="poll[option1]"> 
    <input type="text" name="poll[option2]"> 
</form> 
<a href="javascript:addOption();">Add option</a> 

<script> 
    var optionNumber = 3; //The first option to be added is number 3 
    function addOption() { 
    var theForm = document.getElementById("myForm"); 
    var newOption = document.createElement("input"); 
    newOption.name = "poll[option"+optionNumber+"]"; // poll[optionX] 
    newOption.type = "text"; 
    theForm.appendChild(newOption); 
    optionNumber++; 
    } 
</script> 

Respuesta

4

Su código funciona bien como es:

<?php 
    print_r($_REQUEST) 
?> 
<html> 
<body> 

<form id="myForm" method="post"> 
    <input type="submit"> 
    <input type="text" name="poll[question]"> 
    <input type="text" name="poll[option1]"> 
    <input type="text" name="poll[option2]"> 
</form> 
<a href="javascript:addOption();">Add option</a> 

<script> 
    var optionNumber = 3; //The first option to be added is number 3 
    function addOption() { 
     var theForm = document.getElementById("myForm"); 
     var newOption = document.createElement("input"); 
     newOption.name = "poll[option"+optionNumber+"]"; // poll[optionX] 
     newOption.type = "text"; 
     theForm.appendChild(newOption); 
     optionNumber++; 
    } 
</script> 
</body> 
</html> 

haga clic en Agregar Opción dos veces y se obtiene

Array ([encuesta] => Array ([pregunta] => [opción1] => [opción2] => [opción3] => [opción4] =>))

0

Siempre se puede serializar la forma por sí mismo utilizando una función de JavaScript y luego presentar que (el uso de AJAX o una petición GET o algo así).
http://malsup.com/jquery/form/comp/

2

¿Estás seguro de que no están haciendo ningún error aquí?

He copiado el código de una nueva página y añadió lo siguiente al código detrás de una página ASP.NET (que debería funcionar en cualquier marco):

protected void Page_Load(object sender, EventArgs e) 
{ 
    foreach (string p in this.Request.Params.Keys) { 
     if (p.StartsWith("poll")) { 
      Response.Write(p + "&nbsp;&nbsp;" + this.Request.Params[p] + "<br />"); 
     } 
    } 
} 

añadí campos adicionales y entré valores de prueba , el resultado muestra claramente todos los campos de entrada dinámicos publicados en el servidor.

Aquí está la salida:

poll[question] test1 
poll[option1] test2 
poll[option2] test3 
poll[option3] test4 
poll[option4] test5 
poll[option5] test6 
poll[option6] test7 
12

Acabo de depurar mi sitio donde estaba teniendo un problema similar. Para mí resultó que tener mi tabla y las etiquetas de formulario en el orden "incorrecto" causó el problema.

Roto:

 
table 
    form 

de Trabajo:

 
form 
    table 

Esto señala algo muy importante. El navegador puede funcionar bien, y el formulario puede funcionar bien, con html malformado, pero todavía puede romper cosas, como este, al no haber formateado html correctamente. ¡Tal vez debería empezar a usar mod_tidy!

+0

No me di cuenta de que esto podría tener tal efecto, esto funcionó para mí. Muchas gracias: D – jwbensley

+0

Usted señor es un héroe. Gracias por salvar mis mil años. –

+0

¡Lo mismo! Me salvó de sacarme el pelo! – TecBrat

Cuestiones relacionadas