我有一个事件处理程序,当我点击链接时,它会被调用六次。
var elems = elem.getElementsByTagName('a'); var cntr = 0; for(var a in elems) { AttachEvent(elems[cntr], 'click', function(e) { this.reporturl = this.href; document.getElementById('reportpopup').style.visibility = "visible"; return false; }); }
AttachEvent :
AttachEvent
function AttachEvent(obj,evt,fnc,useCapture){ if (!useCapture) useCapture=false; if (undefined == obj || null == obj) return; if (obj.addEventListener){ obj.addEventListener(evt,fnc,useCapture); return true; } else if (obj.attachEvent) return obj.attachEvent("on"+evt,fnc); else{ MyAttachEvent(obj,evt,fnc); obj['on'+evt]=function(){ MyFireEvent(obj,evt); }; } }
这 this.href getElementsByTagName .
this.href
getElementsByTagName
var cntr = 0; for(var a in elems) { AttachEvent(elems[cntr], 'click', function(e) { ^never changes?
其次,在JavaScript对象成员中,属性、数组元素等都在同一个集合中。 for(var item in obj) obj 如果它是一个有3个元素的数组,它将对每个元素运行一次,对length属性运行一次。..不管其他两个内置属性是什么。这是总数的六倍,这可能不是你想要的。使用 for(var i=0;i<elems.length;i++)
for(var item in obj)
obj
for(var i=0;i<elems.length;i++)