使用闭包捕获onclick事件

时间:2013-09-30 10:17:36

标签: javascript

我想纠正这个例子:

var $foo = $('#foo');
for (var i = 0; i < 10; i++) {
    $foo.append($('<li></li>').text(i).on('click', function() {
        alert(i);
    }));
}

以便在点击时提醒i的正确值。

我该怎么做?我知道答案是使用闭包,但我不确定如何实现它。

我已经尝试过了

$foo.append($('<li></li>').text(i).on('click', function() {
    return (function(i) { 
        alert(i);
    })();
}));

但返回undefined

JSFiddle:http://jsfiddle.net/tmcw/4phm7/1/

2 个答案:

答案 0 :(得分:4)

标准的想法是立即调用函数:

var $foo = $('#foo');
for (var i = 0; i < 10; i++) {
    (function(i){
      $foo.append($('<li></li>').text(i).on('click', function() {
        alert(i);
      }));
    })(i);
}

答案 1 :(得分:2)

您需要为每个函数创建i变量的副本:

$foo.append($('<li></li>').text(i).on('click', function(copy_i) {
    return (function() { 
        alert(copy_i);
    })(i);
}));