jQuery-Formular serialisieren - leere Zeichenfolge

94

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

Wenn ich das Klickereignis starte, ist formData leer. Ich verwende jQuery 1.4.2.

user137348
quelle

Antworten:

213

Sie müssen dem inputElement einen Namen geben. Z.B:

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

wird Ihnen in der Alarmbox geben foo=2.

.serialize()Nimmt den Namen und den Wert der Formularfelder und erstellt eine Zeichenfolge wie name1=value1&name2=value2. Ohne Namen kann eine solche Zeichenfolge nicht erstellt werden.

Beachten Sie, dass dies nameetwas anderes ist als id. Ihr Formular hätte auch nicht funktioniert, wenn Sie es auf "normale" Weise verwendet hätten. Jedes Formularfeld benötigt einen Namen.

Felix Kling
quelle
1
Sind IDs für die Serialisierung von Formularen erforderlich?
Vic
Lassen Sie mich vorschlagen, auch hier die Antwort von Madbreaks aufzunehmen.
Slawisch
Ich habe einen Namen, aber ich habe immer noch die leere Zeichenfolge, wenn meine Ansicht als Sammlung serialisiert wird, also sind die Namen zum Beispiel [0] .Einheit, [0]. Währung
Marc Roussel
Die Antwort unten hat mir geholfen ... stellen Sie sicher, dass Ihre Eingaben nicht deaktiviert sind!
Soundstripe
82

Obwohl dies für dieses spezielle Beispiel nicht gilt, tritt dasselbe Verhalten auf, wenn eine oder mehrere Formulareingaben vorliegen disabled. Diese Eingaben werden in der serialisierten Zeichenfolge nicht angezeigt. In meinem Fall hatten alle Formulareingaben Werte, wurden jedoch deaktiviert, was dazu führte, dass eine leere Zeichenfolge zurückgegeben wurde.

Madbreaks
quelle
4
Das ist böse. Wollte die Felder deaktivieren, während ich die Mail im Ajax-Stil sende, und tat dies, bevor ich das Formular serialisierte ...
Daniel Lang
1
Oh mein Gott, das war ein Problem, das mich verrückt gemacht hat. +1 Mann, gibt es eine Möglichkeit, es auf deaktivierten Elementen zum Laufen zu bringen?
Noitidart
@Noitidart Sie können Ihre eigene serializejQuery-Erweiterung schreiben , die die Eingaben durchläuft und deaktivierte enthält. Soweit ich weiß, gibt es jedoch keine Möglichkeit, sofort einsatzbereite jQuery zu verwenden.
Madbreaks
Es ist sinnvoll, deaktivierte Elemente nicht einzuschließen, da deaktivierte Elemente keine Benutzereingaben enthalten sollten.
Jenny O'Reilly
2
@ JennyO'Reilly Sicher, aber ohne Benutzereingaben bedeutet nicht "hat keinen Wert".
Madbreaks
10

nameDie Eingabe enthält kein Attribut. Dies kann ein Problem bei der Serialisierung sein.

<input id="input1" type="text" value="2" name="input1" />
Sieger
quelle
Mann. Du bist so ein Lebensretter !! Danke dir.
Anjana Silva
6

Stellen Sie außerdem sicher, dass auf der Seite keine 2 Elemente mit derselben ID vorhanden sind.

VahidN
quelle
3
Dies ist ein Kommentar, keine Antwort auf die Frage. Bitte verwenden Sie in Zukunft Kommentare. Danke :)
Gone Coding