为刚刚创建的li元素绑定不同的函数

我动态创建li元素:

 
  • 1
  • 2
  • 3
  • [...]

li_id是一个返回li id(= 1,2,3 …)的数组值

如何将不同的函数绑定到代码中的每个li元素,如下所示:

 for (li_id in lids) { console.log(li_id); $(li_id).bind('mouseover', function() { console.log(li_id); }); } 

以上不起作用。 怎么写得好呢?

使用live()而不是bind()它显示了lids数组的最后一个元素的id,而不是1,2,3 … […],就像$ statement之外的console.log()一样。 。

http://www.mennovanslooten.nl/blog/post/62

要么

循环内的JavaScript闭包 – 简单实用的例子

鉴于您的HTML,代码可以用两种方式编写。

使用jQuery 1.4 Event.data参数:

 var lids = [1,2,3]; for (i in lids) { var li_id = lids[i]; $('#' + li_id).bind('mouseover', { id: li_id }, function(ev) { console.log(ev.data.id); }); } 

或者,使用匿名函数创建闭包:

 var lids = [1,2,3]; for (i in lids) { var li_id = lids[i]; // an anonymous function (function (id) { $('#' + id).bind('mouseover', function() { console.log(id); }); })(li_id); // ...called every time with different id } 

在这个实例中我更喜欢jQuery Event.data方式。

所以关闭时,正确的答案是:

 $(li_id).bind('mouseover', function(val) { return function() { console.log(val); } }(li_id)); 

但只有在需要将循环的值传递给函数时才需要这样做。