it-swarm.com.de

Elemente in jQuery durchlaufen

Ich möchte die Elemente eines HTML-Formulars durchlaufen und die Werte der <input> -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 gilt auch nicht (inspiriert durch die 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();
    });
}

Die Warnung zeigt immer den child.length == 0 an. Manuelles Auswählen der Elemente funktioniert:

     
 >>> $ ("# frmMain"). children () 
 Objektlänge = 42 
 >>> $ ("# frmMain"). children (). filter (": Kontrollkästchen")
 Objektlänge = 3 

Irgendwelche Tipps, wie man die Schleife richtig macht?

27

glaube nicht, dass Sie dazu Zitate brauchen

var child = $("this");

versuchen:

var child = $(this);
40
imjoevasquez

jQuery hat eine ausgezeichnete Funktion zum Durchlaufen einer Reihe von Elementen: .each ()

$('#formId').children().each(
    function(){
        //access to form element via $(this)
    }
);
28
imjoevasquez

Je nachdem, was Sie für jedes Kind brauchen (wenn Sie es irgendwo über AJAX posten), können Sie einfach ...

$("#formID").serialize()

Es erstellt automatisch eine Zeichenfolge mit allen Werten für Sie.

Für das 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();
});
13
Hugoware

Ich habe vorher Folgendes 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 und kann Fehler enthalten. Dies sollte jedoch zu einem Objekt namens data führen, das die Werte für alle Ihre Eingaben enthält.

Beachten Sie, dass Sie mit Kontrollkästchen auf besondere Weise umgehen müssen, um zu vermeiden, dass die Werte von Kontrollkästchen angezeigt werden. Dasselbe gilt wahrscheinlich auch für Radioeingänge.

Beachten Sie auch die Verwendung von Arrays zum Speichern der Werte, da für einen Eingabenamen möglicherweise Werte aus mehreren Eingaben vorhanden sind (insbesondere Ankreuzfelder).

3
SpoonMeiser

für mich funktionierte das alles nicht. Was für mich funktioniert hat, war etwas ganz einfaches:

$("#formID input[type=text]").each(function() {
alert($(this).val());
});
0
bicycle

wenn Sie die einzelnen Funktionen verwenden möchten, sollte dies folgendermaßen aussehen:

$('#formId').children().each( 
  function(){
    //access to form element via $(this)
  }
);

Tauschen Sie einfach die schließende geschweifte Klammer aus. Danke, dass Sie mich darauf aufmerksam gemacht haben, Jobscry, Sie haben mir etwas Zeit gespart.

0
Peter