451 Stimmen

Formular-Eingabefelder mit jQuery? abrufen

Ich habe ein Formular mit vielen Eingabefeldern.

Wenn ich das Submit-Formular-Ereignis mit jQuery abfangen, ist es möglich, alle Eingabefelder dieses Formulars in einem assoziativen Array zu erhalten?

24 Stimmen

Das ist eine gute Frage; tatsächlich finde ich es wirklich seltsam, dass jQuery keine Funktion hat, die genau das tut. Es gibt Funktionen, um die Formulardaten in zwei verschiedenen Formaten zu erhalten, aber nicht die, die am bequemsten für, Sie wissen, Skripting (Vielleicht sollte .val() ein solches Array zurückgeben, wenn es für ein Formularelement aufgerufen wird?)

576voto

nickf Punkte 517253
$('#myForm').submit(function() {
    // get all the inputs into an array.
    var $inputs = $('#myForm :input');

    // not sure if you wanted this, but I thought I'd add it.
    // get an associative array of just the values.
    var values = {};
    $inputs.each(function() {
        values[this.name] = $(this).val();
    });

});

Dank des Tipps von Simon_Weaver gibt es noch eine andere Möglichkeit, wie Sie es machen können, nämlich mit serializeArray :

var values = {};
$.each($('#myForm').serializeArray(), function(i, field) {
    values[field.name] = field.value;
});

Beachten Sie, dass dieses Snippet nicht funktioniert, wenn <select multiple> Elemente.

Es scheint, dass die neue HTML 5-Formulareingaben arbeiten nicht mit serializeArray in jQuery Version 1.3. Dies funktioniert in Version 1.4+

277voto

Lance Rushing Punkte 7340

Ich bin spät dran mit dieser Frage, aber das hier ist noch einfacher:

$('#myForm').submit(function() {
    // Get all the forms elements and their values in one step
    var values = $(this).serialize();

});

8 Stimmen

Das ist wirklich die beste Antwort. Sie behält sogar jede Array-Formatierung, die Sie für Ihre Eingabefelder haben könnten. Ich glaube nicht, dass die Antwort von nickf tatsächlich Ihre Datenstrukturen intakt halten würde, wenn es zum Beispiel mit Zend_Form gebildet wurde, wo Sie field[something] und field[something_else] als Namen der Eingaben haben... zumindest semantisch, kann ich nicht sehen, wie es...

43 Stimmen

Laut den jQuery-API-Dokumenten, .serialize() ( api.jquery.com/serialize ) fasst alle Elemente des Formulars in einem einzigen String zusammen, der an eine URL in einem Query-String angehängt werden kann, was im Wesentlichen eine GET-Formularanforderung nachahmt. Dies würde nicht erreichen, was nickf's Antwort erreicht.

5 Stimmen

Wissenswertes: .serialize() funktioniert auch bei reinen Formularelementen. Also $('form select').serialize() werden die Daten nur für Selects serialisiert.

24voto

Simon_Weaver Punkte 129442

En jquery.form Plugin kann helfen, was andere suchen, die auf diese Frage landen. Ich bin nicht sicher, ob es direkt tut, was Sie wollen oder nicht.

Außerdem gibt es die serializeArray Funktion.

19voto

Malachi Punkte 2102

Manchmal finde ich es sinnvoller, einen nach dem anderen zu holen. Dafür gibt es das hier:

var input_name = "firstname";
var input = $("#form_id :input[name='"+input_name+"']");

0 Stimmen

Anhängen von [0].value zu diesem d.h. $(...)[0].value; hat mir den Wert der Eingabe direkt mitgeteilt, danke!

16voto

Quentin Punkte 850700
$('#myForm').bind('submit', function () {
  var elements = this.elements;
});

Die Variable elements enthält alle Inputs, Selects, Textareas und Fieldsets innerhalb des Formulars.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X