为刚刚创建的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));
但只有在需要将循环的值传递给函数时才需要这样做。