-1

如果满足某些条件,我有以下循环将对象添加到数组中。

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');
          }
4

1 回答 1

-1

问题在于稍后在使用 .pop() 获取最后一个元素的代码中的异步调用

于 2012-05-16T15:19:42.020 回答