多次在循环中使用.trigger

时间:2017-07-12 15:18:43

标签: javascript jquery

我希望在选择框中循环浏览项目,看看其中是否有任何已保存在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?

2 个答案:

答案 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++)