Ok, ich weiß, dass diese Frage bereits eine hoch bewertete Antwort hat, aber eine weitere eine ähnliche Frage wurde gestellt und ich wurde auch auf diese Frage aufmerksam gemacht. Ich möchte auch meine Lösung anbieten, weil sie einen Vorteil gegenüber der akzeptierten Lösung bietet: Sie können deaktivierte Formularelemente einbeziehen (was manchmal wichtig ist, je nachdem, wie Ihre Benutzeroberfläche funktioniert)
Hier ist meine Antwort aus der andere SO Frage :
Ursprünglich verwendeten wir jQuery's serializeArray()
Methode, die jedoch keine deaktivierten Formularelemente enthält. Häufig werden Formularelemente deaktiviert, die mit anderen Quellen auf der Seite "synchronisiert" werden, aber wir müssen die Daten trotzdem in unser serialisiertes Objekt aufnehmen. Also serializeArray()
ist aus. Wir haben die :input
Selektor, um alle Eingabeelemente (sowohl aktivierte als auch deaktivierte) in einem bestimmten Container zu erhalten, und dann $.map()
um unser Objekt zu erstellen.
var inputs = $("#container :input");
var obj = $.map(inputs, function(n, i)
{
var o = {};
o[n.name] = $(n).val();
return o;
});
console.log(obj);
Damit dies funktioniert, muss jeder Ihrer Eingänge eine name
Attribut, das den Namen der Eigenschaft des resultierenden Objekts darstellt.
Das ist tatsächlich etwas anders als das, was wir verwendet haben. Wir mussten ein Objekt erstellen, das wie ein .NET IDictionary strukturiert war, also haben wir folgendes verwendet: (Ich stelle es hier zur Verfügung, falls es nützlich ist)
var obj = $.map(inputs, function(n, i)
{
return { Key: n.name, Value: $(n).val() };
});
console.log(obj);
Diese beiden Lösungen gefallen mir, weil sie eine einfache Anwendung der $.map()
Funktion, und Sie haben die vollständige Kontrolle über Ihren Selektor (also darüber, welche Elemente Sie am Ende in Ihr resultierendes Objekt aufnehmen). Außerdem ist kein zusätzliches Plugin erforderlich. Einfaches altes jQuery.
19 Stimmen
Denn die erste gibt eine Zeichenkette zurück, genau wie das, was Sie bekommen würden, wenn Sie das Formular mit einer GET-Methode übermitteln würden, und die zweite gibt Ihnen ein Array von Objekten, jedes mit einem Name-Wert-Paar. Ich möchte, dass ich, wenn ich ein Feld mit dem Namen "email" habe, ein Objekt erhalte, das es mir ermöglicht, diesen Wert mit obj.email abzurufen. Mit serializeArray() müsste ich etwas tun wie obj[indexOfElement].value