Javascript IE 11中的AddEventListener函数变量范围问题
我有一个在Chrome中运行良好的函数,但在IE中测试时,它无法访问函数外部的变量:Javascript IE 11中的AddEventListener函数变量范围问题,javascript,addeventlistener,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 ciph
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无法访问密码[i](尽管它在Chrome中运行良好)。是否有一种方法可以传递密码[i],或者我可以进行另一种简单的调整,以便IE在创建事件侦听器时可以访问该变量
编辑:经过更多测试后,问题似乎是IE没有保留迭代器[i]的值。无论单击哪个事件,它始终比最终通过高一个。Chrome可以保留迭代器的值
EDIT2:-这就是游戏。它在Chrome中工作,但在IE的(我的版本)中,当我单击“使用提示”,然后单击其中一个框时失败。
“let”在Internet Explorer中存在问题。简单的解决办法是改变:
for (let i = 0, i < cipher.length; i++){
// code
}
for(设i=0,i
到
for(设k=0,k
由于IE通常没有这样的问题,您可能使用了它不支持的东西,因此提供一个工作代码段来复制issueChrome可以保留迭代器的值,我对此表示怀疑。。。请共享一个工作代码段。您的代码错误,而不是浏览器错误!这个代码部分在循环中,对吗?你是怎么宣布“我”的?用“let”还是用“var”?有不同的解决方法,但如果这是在一个循环中,那么您的代码肯定是错误的。@Adriano-我用“let”来声明I。其他任何东西都会破坏密码。
for (let k = 0, k < cipher.length; k++){
let i = k;
// code
}