Ich habe ein Formular mit vielen Eingabefeldern.
Wenn ich das Sendeformular-Ereignis mit jQuery abfange, ist es möglich, alle Eingabefelder dieses Formulars in einem assoziativen Array zu erhalten?
Wassil
Ich habe ein Formular mit vielen Eingabefeldern.
Wenn ich das Sendeformular-Ereignis mit jQuery abfange, ist es möglich, alle Eingabefelder dieses Formulars in einem assoziativen Array zu erhalten?
Nickf
$('#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 hier eine andere Möglichkeit, dies zu tun, indem Sie verwenden serializeArray
:
var values = {};
$.each($('#myForm').serializeArray(), function(i, field) {
values[field.name] = field.value;
});
Beachten Sie, dass dieses Snippet fehlschlagen wird <select multiple>
Elemente.
Es scheint, dass die neue HTML 5-Formulareingaben arbeite nicht mit serializeArray
in jQuery-Version 1.3. Dies funktioniert in Version 1.4+
Lance Rushing
Zu spät zur Party bei dieser Frage, aber das ist noch einfacher:
$('#myForm').submit(function() {
// Get all the forms elements and their values in one step
var values = $(this).serialize();
});
Das ist wirklich die beste Antwort. Es behält sogar alle Array-Formatierungen bei, die Sie möglicherweise für Ihre Eingabefelder haben. Ich glaube nicht, dass die Antwort von nickf Ihre Datenstrukturen tatsächlich intakt halten würde, wenn sie beispielsweise mit Zend_Form gebildet würden, wo Sie ein Feld hätten[something] und Feld[something_else] wie die Namen der Eingänge … zumindest semantisch kann ich nicht sehen, wie es wäre …
– msumme
27. Januar 10 um 3:34 Uhr
Gemäß den jQuery-API-Dokumenten, .serialize()
(api.jquery.com/serialize) fügt alle Elemente des Formulars in eine einzelne Zeichenfolge ein, die zum Anhängen an eine URL in einer Abfragezeichenfolge bereit ist, und ahmt im Wesentlichen eine GET-Formularanforderung nach. Dies würde nicht das erreichen, was die Antwort von nickf erreicht.
– Christoph Parker
02.03.10 um 18:22 Uhr
Wissenswert: .serialize()
funktioniert auch nur mit Formularelementen. So $('form select').serialize()
werden die Daten nur für Auswahlen serialisiert.
– antitoxisch
1. Juni 12 um 10:31 Uhr
Anstatt zu wiederholen $('#myForm')
, verwenden Sie $(this).
– Jimothy
25. Juli 14 um 19:21 Uhr
Ich habe dies verwendet, aber mein Formular hat verschiedene versteckte Elemente (nicht versteckt wie im Typ, ich meine visuell), die ich nicht in die Serialisierung aufnehmen möchte.
– Jemand
29. April 16 um 08:14 Uhr
Der jquery.form Plugin kann dabei helfen, wonach andere suchen, was zu dieser Frage führt. Ich bin mir nicht sicher, ob es direkt das tut, was Sie wollen oder nicht.
Es gibt auch die serializeArray Funktion.
Maleachi
Manchmal finde ich es sinnvoller, eine nach der anderen zu bekommen. Dafür gibt es das:
var input_name = "firstname";
var input = $("#form_id :input[name=""+input_name+""]");
Hier ist eine andere Lösung, auf diese Weise können Sie alle Daten über das Formular abrufen und in einem serverseitigen Aufruf oder so 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();
}
Sie können dies 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" );
});
}
Hoffe, das ist für jeden von euch von Nutzen 🙂
QUentin
$('#myForm').bind('submit', function () {
var elements = this.elements;
});
Die Elementvariable enthält alle Eingaben, Auswahlen, Textbereiche und Feldsätze innerhalb des Formulars.
sparsh turkan
Dieses Stück Code wird funktionieren
Geben Sie anstelle des Namens die E-Mail-Adresse Ihres Formularfelds ein
$(document).ready(function(){
$("#form_id").submit(function(event){
event.preventDefault();
var name = $("input[name="name"]",this).val();
var email = $("input[name="email"]",this).val();
});
});
.
Es ist eine gute Frage; Tatsächlich finde ich es wirklich seltsam, dass jQuery keine Funktion hat, die genau dies tut. Es gibt Funktionen, um die Formulardaten in zwei verschiedenen Formaten zu erhalten, aber nicht das bequemste, wissen Sie, Skripterstellung … (Vielleicht sollte .val() ein solches Array zurückgeben, wenn es auf einem Formularelement aufgerufen wird?)
– Lukas Maurer
18. März 11 um 0:19 Uhr