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?
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?
Hier ist eine andere Lösung, auf diese Weise können Sie alle Daten über das Formular abrufen und sie in einem serverseitigen Aufruf oder etwas verwenden.
$('.form').on('submit', function( e )){
var form = $( this ), // this will resolve to the form submitted
action = form.attr( 'action' ),
type = form.attr( 'method' ),
data = {};
// Make sure you use the 'name' field on the inputs you want to grab.
form.find( '[name]' ).each( function( i , v ){
var input = $( this ), // resolves to current input element.
name = input.attr( 'name' ),
value = input.val();
data[name] = value;
});
// Code which makes use of 'data'.
e.preventDefault();
}
Diese können Sie dann mit Ajax-Aufrufen verwenden:
function sendRequest(action, type, data) {
$.ajax({
url: action,
type: type,
data: data
})
.done(function( returnedHtml ) {
$( "#responseDiv" ).append( returnedHtml );
})
.fail(function() {
$( "#responseDiv" ).append( "This failed" );
});
}
Ich hoffe, dass dies für irgendjemanden von euch von Nutzen ist :)
http://api.jquery.com/serializearray/
$('#form').on('submit', function() {
var data = $(this).serializeArray();
});
Dies kann auch ohne jQuery mit dem XMLHttpRequest Level 2 FormData Objekt gemacht werden
http://www.w3.org/TR/2010/WD-XMLHttpRequest2-20100907/#the-formdata-interface
var data = new FormData([form])
Tatsächlich hält Lance's Antwort das assoziative Array intakt für die POST-Werte, und nimmt eine satte eine Zeile Code.
Warum ist items ein Array? Sie verwenden es wie ein einfaches Objekt. Es gibt keine Notwendigkeit für das Array in hier
Hatte ein ähnliches Problem mit einer kleinen Wendung und ich dachte, ich würde dies herauswerfen. Ich habe eine Callback-Funktion, die das Formular bekommt, so hatte ich ein Formular-Objekt bereits und konnte nicht einfach Varianten auf $('form:input')
. Stattdessen habe ich mir etwas einfallen lassen:
var dataValues = {};
form.find('input').each(
function(unusedIndex, child) {
dataValues[child.name] = child.value;
});
Seine ähnliche, aber nicht identische Situation, aber ich fand diesen Thread sehr nützlich und dachte, ich würde dies am Ende stecken und hoffen, dass jemand anderes fand es nützlich.
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.
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?)