我正在通过javascript(使用jQuery)生成一个无序列表。每个列表项必须接收自己的“点击”事件监听器。但是,我无法将正确的回调附加到正确的项目。一个(剥离的)代码示例可能会让事情变得更清楚:
for(class_id in classes) {
callback = function() { this.selectClass(class_id) };
li_item = jQuery('<li></li>')
.click(callback);
}
实际上,在这个迭代中还有更多的事情发生,但我认为它与这个问题不太相关。无论如何,发生的事情是回调函数似乎被引用而不是存储(&复制)。最终结果?当用户单击任何列表项时,它将始终执行数组中最后一个 class_id
的操作classes
,因为它使用存储在callback
该特定点的函数。
我发现了肮脏的解决方法(例如解析href
封闭a
元素中的属性),但我想知道是否有办法以“干净”的方式实现我的目标。如果我的方法很可怕,请说出来,只要你告诉我原因:-) 谢谢!