繁体   English   中英

jquery.click(callmethod)

[英]jquery.click(callmethod)

$('<a/>').click(function(event) { ChangeXYZ(event); });

上面的问题是我不想要事件,但是我又一个var。

$('<a/>').click(function() { ChangeXYZ(var123); });

但是行的问题是,它在运行时获取var123的值,并且由于我在循环中添加了它,所以总是最终使用var123的最后一个值。 看起来它正在使用var123的引用。 创建时如何使用var123的值代替单击时间。

使用闭包

function (val) {
    return function() {
         ChangeXYZ(val);
    }
}(var123);

注意:未经测试,但应该可以使用。

编辑:固定拼写

假设您的for循环如下所示:

for (var var123=0; var123<10; var123++) {
    $('<a/>').click(function() { ChangeXYZ(var123); });
}

更改为:

for (var var123=0; var123<10; var123++) {
    (function() {
        $('<a/>').click(function() { ChangeXYZ(var123); });
    })();
}

用闭包包装for循环可以解决问题。 实际上,如果通过JSLint运行程序,则会收到一条警告,提示“在循环中创建函数时要小心。请考虑将函数放在闭包中。”

您是否有理由不能发表声明staticvar123 = var123; 在修改var123之前,将代码更改为:

$('<a/>').click(function() { ChangeXYZ(staticvar123); });

首先,请记住,如果将循环内的click事件附加到同一元素(在本例中为元素$('<a/>') ),则最终将对N次响应该元素的相同事件。 因此,您可能不希望这样做,并且需要将调用移到循环之外的.click

其次,如果您仍然需要这样的东西,我相信@ sanand0出错了,您应该考虑将参数传递给调用方函数,并在函数内部使用此参数:

for (var var123=0; var123<10; var123++) {
    (function(v) {
        $('<a/>').click(function() { ChangeXYZ(v); });
    }(var123));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM