3

我有以下代码:

$(document).ready(function () {
    for (i = 1; i <= number_of_banners; i++) {
    var selector = "#link_" + i;
    $(selector).click(function () {
        alert(i);
        });
    }
});

但是 alert() 无法从 for 循环中获取“i”变量。如何在 .click 函数中使用 for 循环的 i 变量?

4

5 回答 5

4

您可以使用此代码:

$(document).ready(function () {
    for (var i = 1; i <= number_of_banners; i++) {
        var selector = "#link_" + i;
        $(selector).on('click', {id: i}, function (e) {
            alert(e.data.id);
        });
    }
});

您应该使用on方法并在其中使用 click 参数而不是使用onclick方法

于 2012-10-24T06:06:45.573 回答
4

使用 jQuery .on(event, data, handler)您可以轻松完成。

$(document).ready(function () {
    for (var i = 1; i <= number_of_banners; i++) {
        var selector = "#link_" + i;
        $(selector).on('click', {id: i}, function (e) {
            alert(e.data.id);
        });
    }
});

工作样本

于 2012-09-18T05:53:30.450 回答
3

这可能是由于JavaScript 提升JavaScript 范围机制的事实吗?

例如:

不起作用,因为 JavaScript 使用函数范围而不是块范围,因为我们通常习惯于其他语言,如 Java 和 C#。为了使它工作,必须通过显式创建一个新的匿名函数来创建一个新的范围,然后绑定相应的变量:

我知道这并不能直接回答上面的问题,但对于其他在这个问题上绊倒的人来说可能仍然有用。

于 2012-09-18T05:54:57.727 回答
1

我认为您可以将它作为参数传递给匿名函数,只要该函数是在可以访问 i 的范围内声明的。

function (i) {
   alert(i);
}
于 2012-09-18T05:33:58.530 回答
1

一个快速的解决方案是使用 eventData 并将当前存储i在其中:

$(document).ready(function () {
    for (var i = 1; i <= number_of_banners; i++) {
        var selector = "#link_" + i;
        $(selector).bind('click', i, function (e) {
            alert(e.data);
        });
    }
});

如果您使用的是 jquery 1.7+,则使用on而不是 bind

于 2012-09-18T05:34:35.457 回答