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