6

我有一些按钮,它们存储在一个数组中。然后我循环遍历该数组以向每个按钮添加一个单击事件。每次单击都会提醒 的值i。我希望这些值是1,2等等3,但它们总是作为一个值返回,以防万一3

你能解释一下为什么会发生这种情况以及如何解决它吗?

请看这个jsFiddle。下面的代码:

var theButtons = ['.button.one', '.button.two', '.button.three'];

for (i=0; i<theButtons.length; i++) {
    $(theButtons[i]).click(function () {
        alert(i); // always returns 3
    });
}

请尽可能简单明了地解释它——我是 Javascript 和编程的初学者。

4

3 回答 3

11
于 2013-07-19T15:45:35.617 回答
2

只需使用 EACH 方法:

$( ".button" ).each(function( index ) {
    $(this).click( function(e){
        alert( index + ": " + $(this).text());
    });
});

小提琴:http: //jsfiddle.net/fE55Y/4/

更新:

同意.each()对于所要求的内容不需要。这是一个没有使用.each()方法的。

$(".button").click(function () {
    alert("Button Index: " + $(this).index());
});
于 2013-07-19T15:47:54.613 回答
1

欢迎使用异步编程和全局变量!

您在这里看到的问题是因为i在这种情况下是全局声明的,因为任何东西都可以从任何地方访问。

因此,执行脚本时会发生什么:

  • 循环遍历类名数组
  • 在每次迭代中,将单击绑定到匹配节点,调用您提供的匿名函数

这里的问题是您提供的函数是在循环之外执行的(例如,当点击发生时),所以i在这种情况下,它的值是上次迭代中的值2

于 2013-07-19T15:46:37.893 回答