3

我在这样的页面上循环浏览一些 HTML 表单元素。

var itemsArray = new Array();
$('input[type="text"].qty').each(function(index) {
    if($(this).val()) {
        itemsArray[index]['qty'] = $(this).val();
        itemsArray[index]['itemPrice'] = $(this).parents('.control-group').find('.itemPrice').val();
        itemsArray[index]['itemID'] = $(this).parents('.control-group').find('.itemID').val();
    }
});

index希望是 0,1,2,3 等.. 像一个常规数组。子元素是关联的并分配给各种值。

我在控制台中收到此错误。

TypeError: itemsArray[index] is undefined

4

3 回答 3

7

您需要确保在开始使用外部数组中的每个项目之前对其进行初始化。请注意,为了清楚起见,我在下面更改为对象表示法。

$('input[type="text"].qty').each(function(index) {
    if($(this).val()) {
        itemsArray[index] = {};
        itemsArray[index].qty = $(this).val();
        itemsArray[index].itemPrice = $(this).parents('.control-group').find('.itemPrice').val();
        itemsArray[index].itemID = $(this).parents('.control-group').find('.itemID').val();
    }
});
于 2013-06-10T17:29:27.173 回答
4

考虑使用对象数组。Javascript 中的数组并不是真正打算以您现在的方式使用(多维部分)。也是itemsArray = []首选new Array()

var itemsArray = [];
$('input[type="text"].qty').each(function(index) {
    if($(this).val()) {
        itemsArray.push({
            qty : $(this).val(),
            itemPrice :  $(this).parents('.control-group').find('.itemPrice').val(),
            itemID : $(this).parents('.control-group').find('.itemID').val()
        });

    }
});
于 2013-06-10T17:32:28.920 回答
1

这意味着它所说的。itemsArray[index]undefined,并且您不能为此分配属性。请注意,您没有“多维数组”,而只是一个对象数组对于每个 new index,您将需要创建一个新对象。

var $this = $(this);
if ($this.val()) {
    var $parent = $(this).parents('.control-group'); // .closest() should suffice
    itemsArray[index] = {
        qty: $this.val(),
        itemPrice: $parent.find('.itemPrice').val(),
        itemID: $parent.find('.itemID').val()
    };
}
于 2013-06-10T17:30:27.113 回答