内部函数的使用jQuery和Javascript环(A function inside a for

2019-09-22 13:32发布

我有以下代码:

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

但警报()不能从一开始的“我”变量循环。 如何使用的变量i for循环。点击函数内?

Answer 1:

您可以使用此代码:

$(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方法和使用参数点击它,而不是使用onclick方法



Answer 2:

使用jQuery 。对(事件,数据,处理程序),你可以很容易地做到这一点。

$(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);
        });
    }
});

工作样本



Answer 3:

可能出现这种情况是由于对这一事实的JavaScript提升 JavaScript的作用域机制?

例如:

  • 错循环变量的例子的封面装订

如JavaScript使用功能范围 ,而不是阻止范围 ,因为我们通常像Java和C#等语言习惯不起作用。 为了使其工作,一个人通过明确创建一个新的匿名函数,然后绑定变量根据创建一个新的范围:

  • 正确循环变量的例子的封面装订

我知道这并不直接回答上面的问题,但仍可能虽然为他人绊倒在这个问题上是有用的。



Answer 4:

我想你可以把它作为一个参数为匿名函数,只要该函数可以访问我一个范围内声明。

function (i) {
   alert(i);
}


Answer 5:

一个快速的解决办法是使用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+然后使用上 ,而不是绑定的



文章来源: A function inside a for loop with jQuery and Javascript