我有这个代码:
var items = this.llistat.getElementsByTagName('a');
for( var i = 0; i < items.length; i++ ){
items[i].addEventListener('click', function(event) {
alert( i );
}, items[i]);
}
监听事件的地方,但是有3
项目和警报始终打印3
在任何元素上(它不尊重索引),
Dosen't items[i]
不应该做关闭的工作吗?
thanks!
不,第三个参数addEventListener
is the useCapture
一。看MDN https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener了解更多信息。
但你可以使用:
for( var i = 0; i < items.length; i++ ){
(function(i){
items[i].addEventListener('click', function(event) {
alert( i );
}, false);
})(i);
}
or
var handler = function(event) {
var i = items.indexOf(this);
alert( i );
};
for( var i = 0; i < items.length; i++ ){
items[i].addEventListener('click', handler, false);
}
第一个为每个元素创建一个新的事件处理程序,因此它需要更多内存。第二个重用相同的事件侦听器,但使用indexOf
,所以速度比较慢。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)