如果满足某些条件,我有以下循环将对象添加到数组中。
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');
}
答案 0 :(得分:-1)
问题在于稍后在使用.pop()获取最后一个元素的代码中进行异步调用