代码之家  ›  专栏  ›  技术社区  ›  James Black

当我单击链接时,单击事件处理程序会执行多次

  •  0
  • James Black  · 技术社区  · 16 年前

    我有一个事件处理程序,当我点击链接时,它会被调用六次。

    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 :

    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 .

    1 回复  |  直到 3 年前
        1
  •  2
  •   Rex M    16 年前

    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++)