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.

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


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.


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

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.


3
To jest komentarz, a nie odpowiedź na pytanie. Prosimy o używanie komentarzy w przyszłości. Dzięki :)
Gone Coding,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.