IE 11中的AddEventListener函数变量范围问题

时间:2018-05-08 07:07:49

标签: javascript addeventlistener

我有一个在Chrome中运行良好的功能,但在IE中测试时,它无法访问该功能之外的变量:

if (cipher[i].solved == false){
    bottom.classList.add("HighlightBox");            
    bottom.classList.add("bg-warning");
    bottom.addEventListener('click', function(){
        // IE cannot access cipher[i] in this function
        cipher[i].solved = true;
        hintsUsed++;
        runHint(true);
        populateAnswerKey(puzzleWord, cipher, false);
        populatePuzzleBoard(puzzleWord, cipher);

    });
} 

IE无法访问cipher [i](虽然它在Chrome中运行正常)。有没有办法通过cipher [i],或者我可以进行另一个简单的调整,以便IE在创建事件监听器时可以访问该变量?

编辑:经过更多测试,似乎问题是IE不保留迭代器[i]的值。无论点击哪个事件,它总是比最终传递高一个。 Chrome可以保留迭代器的价值。

EDIT2 enter image description here - 这就是游戏。它适用于Chrome,但是当我点击"使用提示"然后单击其中一个框。

1 个答案:

答案 0 :(得分:0)

let statement in loop doesn't work as expected in IE

"让"在Internet Explorer中有问题。简单的解决方法是改变:

for (let i = 0, i < cipher.length; i++){
    // code  
} 

for (let k = 0, k < cipher.length; k++){
    let i = k;
    // code  
}