循环时显示模态并等待每个元素的操作

时间:2016-01-19 13:04:05

标签: javascript for-loop twitter-bootstrap-3

我正在为循环寻找简单的解决方案,我必须确认每个元素。我看着暂停和恢复,但这很麻烦。有没有其他方法可以让它变得简单?我确信这个问题并不是那么罕见,很多人都坚持这个问题。

我想要实现的是 - 我在列表中循环,如果我没有通过其EAN代码找到项目,那么它会打开搜索功能以找到这个并在找到该项目之后(或not)用户点击Next并继续循环,直到出现相同情况。

我现在有些代码:

for(var f = 0; f < biLen; f++){

                var ean_parsed = parsedList[i][1];              
                if(beerList[f].get("ean") === ean_parsed){
                    console.log("Beer found: " + beerList[f].get("beer_name"));
                    break;
                } else {
                    if(f === biLen - 1){
                        //open modal, search for item and then continue looping    
                        console.log("B'r not found: " + parsedList[i][0]);                  
                    }                   
                }
            }

编辑(整个功能代码而不是它的一部分):

function parserCompareList(){                   

        var parsedList = parseResult;
        var piLen = parsedList.length;
        var beerList = listaPiwArr;
        var biLen = beerList.length;

        var new_offer = [];
        var counter = document.getElementById('imHeader');

        for(var i = 0; i < piLen; i++){
                    counter.innerHTML = i + "/" + piLen; //plain text that's keeping where we actually are with this
            for(var f = 0; f < biLen; f++){

                var ean_parsed = parsedList[i][1];              
                if(beerList[f].get("ean") === ean_parsed){

                    console.log("Beer found: " + beerList[f].get("beer_name"));
                    break;
                } else {
                    if(f === biLen - 1){
                        console.log("B'r not found: " + parsedList[i][0]);

                    }                   
                }
            }

    }

}

解答:

var indexCache;

function loop() {
    var index = indexCache || 0;

    for (var f = index; f < biLen; f++) {
        var ean_parsed = parsedList[i][1];
        if (beerList[f].get("ean") === ean_parsed) {
            console.log("Beer found: " + beerList[f].get("beer_name"));
            break;
        } else {
            if (f === biLen - 1) {
                // Assuming $modal is the bootstrap modal
                indexCache = f;

                //$modal.modal().one('hide.bs.modal', loop);
                $('#importModal').modal('show').one('hidden.bs.modal', loop) //  <-- this one works like a charm
                return;
            }
        }
    }
}

loop();

1 个答案:

答案 0 :(得分:3)

var indexCache;

function loop() {
    var index = indexCache || 0;

    for (var f = index; f < biLen; f++) {
        var ean_parsed = parsedList[i][1];
        if (beerList[f].get("ean") === ean_parsed) {
            console.log("Beer found: " + beerList[f].get("beer_name"));
            break;
        } else {
            if (f === biLen - 1) {
                // Assuming $modal is the bootstrap modal
                indexCache = f;

                $modal.modal().one('hide.bs.modal', loop);

                return;
            }
        }
    }
}

loop();

我们有一个indexCache变量,用于保存正在处理的啤酒的索引。

如果找到了EAN,太棒了!我们处理它并继续下一个啤酒。

如果没有,我们将当前啤酒索引存储在缓存中并显示模态并立即退出循环。隐藏模态时,循环将从缓存的索引中恢复。

PS。我假设你正在使用Twitter Bootstrap模式。因此,为事件添加处理程序&#39; hide.bs.modal&#39;。但是,如果是这种情况,可以使用自己的模态实现来完成类似的事情。