Formularz jQuery serialize - pusty ciąg

95

Mój html:

 <script type="text/javascript">

    $(function() {

        $("#bt1").click(function() {

            var f = $("#form1");
            var formData = f.serialize();

            alert(formData);
        });

    }); 
</script> 

 <div id="div1">
      <form id="form1" action="/Home/Test1" method="post" name="down">
        <div id="div2">
            <input id="input1" type="text" value="2" />
        </div>    
      </form>
  </div>

 <input type="submit" id="bt1" />

Kiedy uruchamiam zdarzenie click, formData jest puste. Używam jQuery 1.4.2.

user137348
źródło

Odpowiedzi:

214

Musisz nadać inputelementowi nazwę. Na przykład:

<form id="form1" action="/Home/Test1" method="post" name="down">
    <div id="div2">
        <input id="input1" type="text" value="2" name="foo"/>
    </div>    
</form>

poda w polu ostrzeżenia foo=2.

.serialize()przyjmuje nazwę i wartość pól formularza i tworzy ciąg podobny do name1=value1&name2=value2. Bez nazwy nie może stworzyć takiego ciągu.

Zauważ, że nameto coś innego niż id. Twój formularz również by nie zadziałał, gdybyś używał go w „normalny” sposób. Każde pole formularza musi mieć nazwę.

Felix Kling
źródło
1
czy identyfikatory są niezbędne do serializacji formularza?
Vic
Proponuję zawrzeć tutaj również odpowiedź Madbreaks.
słowiański
Mam imię, ale nadal mam pusty ciąg, gdy serializuję mój widok jest zbiorem, więc nazwy to na przykład [0] .Unit, [0] .Waluta
Marc Roussel
Odpowiedź poniżej pomogła mi ... upewnij się, że twoje dane wejściowe nie są WYŁĄCZONE!
pasek dźwiękowy
83

Chociaż nie ma to zastosowania do tego konkretnego przykładu, to samo zachowanie występuje, jeśli co najmniej jedno dane wejściowe formularza to disabled. Te dane wejściowe nie pojawią się w serializowanym ciągu. W moim przypadku wszystkie dane wejściowe formularza miały wartości, ale były wyłączone, co skutkowało zwróceniem pustego ciągu.

Madbreaks
źródło
4
To paskudne. Chciał wyłączyć pola, a ja jestem z wysyłaniem poczty Ajax styl i zrobił to przed szeregowania formularz ...
Daniel Lang
1
O mój Boże, to był problem, który doprowadzał mnie do szału. +1 człowiek, jakikolwiek sposób, aby działał na wyłączonych elementach?
Noitidart
@Noitidart Możesz napisać własne serializerozszerzenie jQuery, które iteruje po wejściach i zawiera wyłączone. Ale o ile wiem, nie da się tego zrobić przy użyciu gotowego do użycia jQuery.
Madbreaks
Nie ma sensu dołączać wyłączonych elementów, ponieważ wyłączone elementy nie powinny zawierać danych wejściowych użytkownika.
Jenny O'Reilly
2
@ JennyO'Reilly Jasne, ale brak danych wejściowych użytkownika nie oznacza, że ​​„nie ma wartości”.
Madbreaks
10

W namedanych wejściowych nie ma atrybutu ... co może być problemem przy serializacji.

<input id="input1" type="text" value="2" name="input1" />
Zwycięzca
źródło
Człowiek. Jesteś takim wybawcą życia !! Dziękuję Ci.
Anjana Silva
6

Upewnij się również, że na stronie nie ma 2 elementów o tym samym identyfikatorze.

VahidN
źródło
3
To jest komentarz, a nie odpowiedź na pytanie. Prosimy o używanie komentarzy w przyszłości. Dzięki :)
Gone Coding,