2008-11-23 15 views
11

Tworzę prosty formularz do tworzenia ankiet, dlatego chcę możliwość dodania dodatkowych pól wejściowych na wypadek, gdyby użytkownik potrzebował więcej opcji w ankiecie.Wyślij pola wprowadzania formularzy dodane javascript

Zrobiłem kod JavaScript, który dodaje nowe pole wejściowe do formularza, ale dynamicznie dodane pola wejściowe nie są publikowane po przesłaniu formularza (używam standardowego przycisku przesyłania).

Czy istnieje sposób, aby dynamicznie dodane pola zostały opublikowane/rozpoznane jako część formularza?

<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> 

Odpowiedz

4

Twój kod działa poprawnie jak:

<?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> 

kliknij Dodaj Opcję dwa razy i masz

Array ([ankietę] => Array ([pytanie] => [opcja1] => [opcja2] => [opcja3] => [opcja4] =>))

0

Zawsze można szeregować formularz samodzielnie za pomocą funkcji javascript, a następnie twierdzą, że (przy użyciu AJAX lub żądania GET lub coś).
http://malsup.com/jquery/form/comp/

2

Czy jesteś pewien, że tutaj nie popełniłeś żadnego błędu?

skopiowane kodu na nowej stronie i dodaje się następujący kod do tyłu od strony ASP.NET (powinien działać na każdym ram):

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 />"); 
     } 
    } 
} 

dodałem dodatkowe pola i wszedł wartości testowe , dane wyjściowe wyraźnie pokazują wszystkie dynamiczne pola wejściowe wysłane z powrotem do serwera.

Oto wynik:

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

Właśnie debugowałem moją stronę, w której byłem podobny problem. Dla mnie okazało się, że spowodowanie problemu spowodowało, że posiadanie tablic i formularzy w "złej" kolejności powodowało problem.

łamany:

 
table 
    form 

robocza:

 
form 
    table 

To wskazuje na coś bardzo ważnego. Przeglądarka może renderować się dobrze, a formularz może działać dobrze, ze zniekształconym html, ale nadal możesz niszczyć takie rzeczy, nie mając poprawnie sformatowanego html. Może powinienem zacząć używać mod_tidy!

+0

Nie zdawałem sobie sprawy, że to może mieć taki efekt, to działało dla mnie. Wielkie dzięki: D – jwbensley

+0

Ty jesteś bohaterem. Dziękuję za uratowanie mojego tysiąclecia. –

+0

Ditto! Uratowałeś mnie od wyciągania włosów! – TecBrat

Powiązane problemy