etna
添加一个循环并为数组中的每个项目设置不同的事件侦听器:
function evl(etna){
for(var i=0; i < etna.length; ++i) {
(function() {
var thisNode = etna[i];
var localval = i;
etna[i].addEventListener("click",function (el) {
alert("Link detected a click. Cancellable: "+ thisNode.id + " which is id " + localval );
},false);
})();
}
}
工作jsfiddle:http: //jsfiddle.net/5xDjE/
立即调用的函数只是强制定义 and 的作用域thisNode
,localval
否则所有元素都会引用同一个变量(javascript 作用域很有趣)。
我建议不要使用索引(范围 via localval
),因为它需要保留原始节点数组。由于节点会随时间而变化,并且 javascript 会为您进行引用计数,因此您希望避免使用这些长节点数组。
请注意this
,在 IE8 及以下,并不总是有被点击的元素指向全局窗口对象。