我希望在选择框中循环浏览项目,看看其中是否有任何已保存在API中的数量,并将所述项目附加到页面。
我的代码使用.trigger('更改')执行此操作,然后退出for循环。
如果没有.trigger('更改'),for循环本身就会完成,但如果没有.trigger('更改'),则不会追加任何项目。
$(window).on('load', function(e) {
if (Basket) {
var lineItemArray = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 4];
for (i=0; i < lineItemArray.length; i++) {
if (Basket.LineItems[lineItemArray[i]].Quantity > 0) {
// Append item to page (function elsewhere takes care of this)
$('#select-other-items-section').find('option[value="' + lineItemArray[i] + '"]').attr("selected",true).trigger('change');
}
}
}
});
有人能够建议错误吗?或者甚至不可能在循环中使用.trigger?
答案 0 :(得分:1)
您可以使用multiple
将过滤后的数组直接传递给<select>
val()
。
然后在<select>
var filteredVals = lineItemArray.filter(function(val, i){
if(!Basket.LineItems[val].Quantity){
return false; // don't want this one
}
// Append item to page here
return true;
});
$('#select-other-items-section').val(filteredVals).change();
答案 1 :(得分:1)
在这一行:
for (i=0; i < lineItemArray.length; i++)
i
变量变为全局。如果全局i
在循环内部的任何其他位置设置(在这种情况下在更改事件处理程序中),那么它也将更改此处使用的i
。
通过将i
更改为当前范围进行修复:
for (var i=0; i < lineItemArray.length; i++)