Ich möchte die Elemente eines HTML-Formulars durchlaufen und die Werte der -Felder in einem Objekt speichern. Der folgende Code funktioniert jedoch nicht:
function config() {
$("#frmMain").children().map(function() {
var child = $("this");
if (child.is(":checkbox"))
this[child.attr("name")] = child.attr("checked");
if (child.is(":radio, checked"))
this[child.attr("name")] = child.val();
if (child.is(":text"))
this[child.attr("name")] = child.val();
return null;
});
Folgendes auch nicht (inspiriert von der Antwort von Jobscry):
function config() {
$("#frmMain").children().each(function() {
var child = $("this");
alert(child.length);
if (child.is(":checkbox")) {
this[child.attr("name")] = child.attr("checked");
}
if (child.is(":radio, checked"))
this[child.attr("name")] = child.val();
if (child.is(":text"))
this[child.attr("name")] = child.val();
});
}
Der Alarm zeigt das immer an child.length == 0. Die manuelle Auswahl der Elemente funktioniert:
Irgendwelche Tipps, wie man die Schleife richtig macht?
Ihr Thread hat mir gerade 20 Minuten zeilenweise Eingabefelder für mehrere Formulare erspart -_-;. +1.
– Zeboidlund
28. November 2011 um 18:22 Uhr
imjoevasquez
glaube nicht, dass du Zitate dazu brauchst:
var child = $("this");
Versuchen:
var child = $(this);
imjoevasquez
jQuery hat eine hervorragende Funktion, um eine Reihe von Elementen zu durchlaufen: .jeder()
$('#formId').children().each(
function(){
//access to form element via $(this)
}
);
Funktioniert bei mir nicht, siehe meine Bearbeitung der Frage. Weitere Ideen?
– Christian Aichinger
4. Oktober 2008 um 12:23 Uhr
Das Formular wird wahrscheinlich einen Absatz oder etwas Ähnliches als untergeordnetes Element haben. Sie müssen sicherstellen, dass Sie nur Eingabeelemente auswählen.
– SpoonMeiser
4. Oktober 2008 um 18:00 Uhr
“children()” ruft alle DOM-Kinder innerhalb des Formulars ab, nicht die Elemente.
– mpemburn
1. November 2013 um 14:13 Uhr
Hugo
Je nachdem, wofür Sie jedes Kind brauchen (wenn Sie es irgendwo über AJAX posten möchten), können Sie einfach tun …
$("#formID").serialize()
Es erstellt automatisch eine Zeichenfolge mit allen Werten für Sie.
Wie beim Durchlaufen von Objekten können Sie dies auch tun.
$.each($("input, select, textarea"), function(i,v) {
var theTag = v.tagName;
var theElement = $(v);
var theValue = theElement.val();
});
Folgendes habe ich bisher verwendet:
var my_form = $('#form-id');
var data = {};
$('input:not([type=checkbox]), input[type=checkbox]:selected, select, textarea', my_form).each(
function() {
var name = $(this).attr('name');
var val = $(this).val();
if (!data.hasOwnProperty(name)) {
data[name] = new Array;
}
data[name].push(val);
}
);
Dies wird nur aus dem Speicher geschrieben, kann also Fehler enthalten, aber dies sollte ein aufgerufenes Objekt erzeugen data die die Werte für alle Ihre Eingaben enthält.
Beachten Sie, dass Sie mit Kontrollkästchen besonders umgehen müssen, um zu vermeiden, dass Sie die Werte von nicht aktivierten Kontrollkästchen erhalten. Dasselbe gilt wahrscheinlich für Funkeingänge.
Beachten Sie auch die Verwendung von Arrays zum Speichern der Werte, da Sie für einen Eingabenamen möglicherweise Werte von mehreren Eingaben haben (insbesondere Kontrollkästchen).
Wenn Sie die each-Funktion verwenden möchten, sollte es so aussehen:
$('#formId').children().each(
function(){
//access to form element via $(this)
}
);
Tauschen Sie einfach die schließende geschweifte Klammer gegen eine schließende Klammer aus. Danke für den Hinweis, Jobscry, du hast mir etwas Zeit gespart.
Warum hast du das als Antwort gepostet, wenn du sagst, dass du nur antwortest? jobscry? Es ist derselbe Code, den er gepostet hat. Dafür sind Kommentare da.
– Shane Reustle
23. Oktober 2010 um 18:52 Uhr
Fahrrad
bei mir hat das alles nicht funktioniert. Was bei mir funktioniert hat, war etwas ganz Einfaches:
Warum hast du das als Antwort gepostet, wenn du sagst, dass du nur antwortest? jobscry? Es ist derselbe Code, den er gepostet hat. Dafür sind Kommentare da.
– Shane Reustle
23. Oktober 2010 um 18:52 Uhr
Dies ist die einfachste Möglichkeit, ein Formular zu durchlaufen, indem nur auf die Formularelemente zugegriffen wird. Innerhalb jeder Funktion können Sie überprüfen und erstellen, was Sie wollen. Beachten Sie beim Erstellen von Objekten, dass Sie es außerhalb der einzelnen Funktionen deklarieren möchten.
$('#formId input, select, textarea') werde alles zurückgeben input Elemente im Formular, zusammen mit jedes Auswahlfeld und Textfeld auf der Seite.
– chao
26. März 2013 um 20:22 Uhr
Es verhält sich tatsächlich nicht so … Die Verwendung dieses genauen Formats in JSFiddle führte tatsächlich dazu, dass nur die Auswahl und der Textbereich widerhallten. Das Hinzufügen eines Kommas vor “Eingabe” ergibt das, was Sie sagen.
– Scottzozer
27. März 2013 um 12:17 Uhr
Wirklich? Weil jsfiddle.net/UDD7E/3 zeigt genau das was ich meinte. Beide Auswahlfelder und beide Textbereiche sind rot, obwohl sich jeweils einer außerhalb des Formulars befindet.
– chao
27. März 2013 um 14:19 Uhr
Interessant, ich bin auf andere Ergebnisse gekommen. Vielleicht liegt es daran, dass ich es auf Knopfdruck gestartet habe. Sehr eigenartig. Ich würde eine Geige hochwerfen, aber es spielt keine Rolle mehr.
– Scottzozer
27. März 2013 um 16:59 Uhr
Hab gerade die Bearbeitung bemerkt. Der neue Code sollte besser funktionieren, da Sie das Formular abrufen und abfragen (was die Abfrage auf eine Weise einschränkt, die der andere Code nicht hatte). Der Code darüber ist immer noch kaputt, und Sie möchten ihn vielleicht loswerden, aber zumindest haben Sie jetzt etwas, das funktioniert. 🙂
– chao
4. April 2013 um 16:10 Uhr
11457500cookie-checkElemente in jQuery durchlaufenyes
Ihr Thread hat mir gerade 20 Minuten zeilenweise Eingabefelder für mehrere Formulare erspart -_-;. +1.
– Zeboidlund
28. November 2011 um 18:22 Uhr