我正在遍历一个表以从每个表行中选择表单元素。在以下示例中我在做什么错?

var result = new Array();
var counter = 1;

$('tbody tr', this.el).each(function(){

    var inner = new Array();

    $('input',this).each(function(){
        console.log(this.name, $(this).val());  // Works: sends name/value to console!
        inner[this.name] = $(this).val(); // Appears to be empty
    });

    result[counter] = inner;
    counter++;
});

console.log(result);

最佳答案

您在做数组错误。

在Javascript中,数组是对象的特例,它仅具有数字键,并且具有由诸如push之类的函数定义的接口:

var myArray = [];
myArray.push("first element");
myArray.push("second element");
myArray.push("third element");


您正在犯一个非常常见的错误,即尝试使用像更通用的对象这样的数组,分配字符串键并使用x[y] = z表示法来这样做。这是一种hack,有时似乎碰巧可以用,但并不是应该如何使用数组。

您使用innerresult遇到相同的问题。

相反,请首先使用您尝试使用的通用对象:

var result  = {};     // <!-- create new _object_
var counter = 1;

$('tbody tr', this.el).each(function() {

    var inner = {};   // <!-- create new _object_

    $('input', this).each(function() {
        var val = this.value;

        console.log(this.name, val);
        inner[this.name] = val;
    });

    result[counter] = inner;
    counter++;
});

console.log(result);

关于jquery - jQuery:不能迭代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7311280/

10-11 13:37