gpt4 book ai didi

javascript - 原型(prototype)添加事件监听器

转载 作者:行者123 更新时间:2023-11-30 10:56:11 25 4
gpt4 key购买 nike

出于某种原因,当我尝试将 actionlisetner 分配给列表元素时,该值不固定。这就是我的意思:

Event.observe(window, 'load', function() {
for(i = 1; i <= $$('ul#review_list li').length; i++) {
$('cover_' + i).observe('click', function(event) {
alert(i);
});
}

});

#review_list 中有 7 个列表元素,出于某种原因,每当单击任何 li 元素时,我都会收到一个警报,每个元素被单击时的值为 8。我希望每个人都提醒其各自的 i 值。我在这里做错了什么?

谢谢!

最佳答案

试试这个:

Event.observe(window, 'load', function() {
for(i = 1; i <= $$('ul#review_list li').length; i++) {

(function (i) { // i is passed as an argument below

$('cover_' + i).observe('click', function(event) {
alert(i); // creates a closure around the argument i
});

})(i); // pass i as an argument

}
});

第一种方法不行的原因是因为alert(i);在循环变量 i 周围创建一个闭包,它会随着每个事件分配而递增。在第一个事件被触发时,i 的值是 8,这对所有事件都是通用的,这就是为什么无论你点击哪里都会得到 8。

在第二种方法中,我发布的那个,alert(i) 创建了一个围绕参数 i 的闭包,它不会与任何其他事件监听器共享.

无论如何,你应该阅读this article on JavaScript closures以便更好地理解它们。

关于javascript - 原型(prototype)添加事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1284212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com