Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript .推动环路的断开_Javascript_Jquery - Fatal编程技术网

Javascript .推动环路的断开

Javascript .推动环路的断开,javascript,jquery,Javascript,Jquery,我有下面的循环,如果满足某些条件,将对象添加到数组中 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 plac

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

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);

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

创建一个最小的测试用例(例如,只有最后一部分有一些显示问题的模拟数据)并发布JSFIDLE。还要确保在不同的浏览器中尝试。Chrome有一个有趣的习惯,至少在历史上是这样的,那就是做funky console.log缓存。既然你可以在一个循环中完成,为什么还要运行两个循环呢?这些循环在不同的函数中吗?是的,它们在两个不同的函数中。后者位于submit事件下。根据您提供的代码(以及第二个循环在稍后执行的假设,即在用户输入值之后),我没有发现任何错误。看看这个。据我所知,它工作得很好(只需在字段中输入一些值,单击按钮并检查控制台)。问题在于代码中稍后使用.pop()获取最后一个元素的异步调用
         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');
          }