循环遍历jQuery中的元素

Chr*_*ger 27 javascript jquery

我想循环遍历HTML表单的元素,并将<input>字段的值存储在对象中.但是,以下代码不起作用:

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;
    });
Run Code Online (Sandbox Code Playgroud)

以下都没有(受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();
    });
}
Run Code Online (Sandbox Code Playgroud)

警报始终显示child.length == 0.手动选择元素有效:

    
>>> $("#frmMain").children()
Object length=42
>>> $("#frmMain").children().filter(":checkbox")
Object length=3

有关如何正确执行循环的任何提示?

imj*_*uez 40

不认为你需要引用这个:

var child = $("this");
Run Code Online (Sandbox Code Playgroud)

尝试:

var child = $(this);
Run Code Online (Sandbox Code Playgroud)


imj*_*uez 28

jQuery具有很好的循环一组元素的功能: .each()

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


Hug*_*are 13

根据您对每个孩子的需求(如果您希望通过AJAX将其发布到某个地方),您可以...

$("#formID").serialize()
Run Code Online (Sandbox Code Playgroud)

它会自动为您创建一个包含所有值的字符串.

至于循环对象,你也可以这样做.

$.each($("input, select, textarea"), function(i,v) {
    var theTag = v.tagName;
    var theElement = $(v);
    var theValue = theElement.val();
});
Run Code Online (Sandbox Code Playgroud)