2009-09-24 4 views
0

У меня есть обработчик событий, который вызывается шесть раз, когда я нажимаю на ссылку.Обработчик события Onclick выполняется несколько раз, когда я нажимаю ссылку

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; 
    }); 
} 

Я использую Firefox 3.5 в настоящее время, так это используется для 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.

Итак, я привязал событие к моей ссылке, и когда я нажимаю на одну из трех, она называется шесть раз с той же информацией о ссылках.

Любая идея, почему это может произойти?

ответ

2

Похоже, вы подключаете один и тот же обработчик событий к 0-му элементу столько раз, сколько есть ссылок.

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++) для надежной работы.

+0

Спасибо, я забыл увеличить свой cntr. –

Смежные вопросы