jquery中的一个简单混淆

jquery中的一个简单混淆,jquery,loops,Jquery,Loops,但是单击任何按钮时的值总是27,为什么?当单击处理程序执行时,循环早已完成,并且m被分配了27的值-循环在该值上终止 $("#letter1").attr('value', m); for(var m=1;m在执行单击处理程序时,循环早已完成,m被赋值为27-循环终止 $("#letter1").attr('value', m); 用于(var m=1;m你的循环每次运行26次,每次递增m,因此m最终为27。也许你想要的是将一个不同的var设置为1,然后使用它,你的循环每次递增m运行26次,

但是单击任何按钮时的值总是27,为什么?

单击
处理程序执行时,循环早已完成,并且
m
被分配了27的值-循环在该值上终止

$("#letter1").attr('value', m);

for(var m=1;m在执行
单击
处理程序时,循环早已完成,
m
被赋值为27-循环终止

$("#letter1").attr('value', m);

用于(var m=1;m你的循环每次运行26次,每次递增m,因此m最终为27。也许你想要的是将一个不同的var设置为1,然后使用它,你的循环每次递增m运行26次,因此m最终为27。也许你想要的是将一个不同的var设置为1,然后使用它,原因是正确的(当处理程序执行时,
m
已经是
27
),但我建议一个不同的解决方案

如果我们使用一个不同的变量,该变量不会随循环而改变,那么您将获得预期的行为。由于JavaScript具有函数作用域,因此最简单的方法是使用一个函数:

for(var m=1;m<=26;m++)
{
  $("#letter"+m).attr("valueOfM", m);
  $("#letter"+m).click(function() {
    $("#letter1").attr('value', $(this).attr("valueOfM")); 
    j = 0;

    setValue(this.value, length);
    changeImage("#img");
  });
}
函数attachHandler(m){
//因为它是一个参数,所以这里的m最初会取
//m在外部,但它不是同一个变量,所以它不会随着
//外部环境发生了变化。
$(“#字母”+m)。单击(函数(){
美元(“#字母1”).attr('value',m);
j=0;
设置值(此值为长度);
更改图像(“img”);
});
}
对于(var m=1;m)来说,其原因是正确的(当处理程序执行时,
m
早已是
27
),但我建议一种不同的解决方案

如果我们使用一个不同的变量,该变量不会随循环而改变,那么您将获得预期的行为。由于JavaScript具有函数作用域,因此最简单的方法是使用一个函数:

for(var m=1;m<=26;m++)
{
  $("#letter"+m).attr("valueOfM", m);
  $("#letter"+m).click(function() {
    $("#letter1").attr('value', $(this).attr("valueOfM")); 
    j = 0;

    setValue(this.value, length);
    changeImage("#img");
  });
}
函数attachHandler(m){
//因为它是一个参数,所以这里的m最初会取
//m在外部,但它不是同一个变量,所以它不会随着
//外部环境发生了变化。
$(“#字母”+m)。单击(函数(){
美元(“#字母1”).attr('value',m);
j=0;
设置值(此值为长度);
更改图像(“img”);
});
}

对于(var m=1;moh,我明白了,那么可能是什么溶液?哦,我明白了,那么可能是什么溶液?哦,我明白了,那么可能是什么溶液?哦,我明白了,那么可能是什么溶液?
for(var m = 1; m <= 26; m++) {
    (function(m) {
        $("#letter"+m).click(function() {
            $("#letter1").attr('value', m); 
            j = 0;
            setValue(this.value, length);
            changeImage("#img");
        });
    })(m);
}