如果满足某些条件,我有以下循环将对象添加到数组中。
var form = $('form[id^="product-form"]'),
submit_button = $('#add-to-cart'),
attr_fields = $('.additional input[type=text]'),
attr_fields_default = {};
// Get the default values for each attribute field and place into an obj
attr_fields.each(function () {
var field = $(this),
field_id = field.attr('id'),
field_val = field.val();
attr_fields_default[field_id] = field_val;
});
var extra_attr = [];
for (var i = 0; i < attr_fields.length; i++) {
var _field = $(attr_fields[i]);
if (_field.val() != attr_fields_default[_field.attr('id')]) {
var jsonStr = {
'add': _field.attr('id'),
'quantity': 1
};
extra_attr.push(jsonStr);
console.log(jsonStr);
} else {
_field.attr('disabled', 'disabled').val('None');
}
}
console.log(extra_attr);
代码在最后一个循环之前运行良好,尽管 console.log( jsonStr ) 按预期输出最后一个对象,但 console.log( extra_attr ) 没有。它不会将最后一项推入数组。我什至尝试将 jsonStr 更改为虚拟字符串“test”,但仍然得到相同的结果。
这是我的 chrome 开发者控制台的截图http://cl.ly/GdHw
我还应该注意,我最初尝试使用 .each() 以完全相同的结果遍历选择器
attr_fields
.each(function(){
if ( $(this).val() != attr_fields_default[ $(this).attr('id') ] ) {
var jsonStr = {'add': $(this).attr('id'), 'quantity': 1};
extra_attr.push( jsonStr );
console.log( jsonStr );
} else {
$(this).attr('disabled', 'disabled').val('None');
}