Присоединение события к элементу в IE через JS и передача самого объекта

У меня есть этот бит JS, который вызывается, поскольку он проходит через каждый из элементов INPUT на странице:

if (thisField.addEventListener){ // good browsers
    thisField.addEventListener('focus', function(event){toggleHelpText(this,event)}, true);
    thisField.addEventListener('blur', function(event){toggleHelpText(this,event)}, false);
} else if (thisField.attachEvent){ // IE
    thisField.attachEvent('onfocus',function(event){toggleHelpText(thisField,event)});
    thisField.attachEvent('onblur',function(event){toggleHelpText(thisField,event)});
}   

В хороших браузерах он делает то, что должен делать. Он прикрепляет слушатель события фокуса и размытия к каждому элементу, который при срабатывании передает объект, а событие, которое его сработало, в функцию 'toggleHelpText'.

IE не работает, хотя В IE происходит то, что каждое поле, к которому прикреплен прослушиватель событий, имеет объект thisField, ссылающийся только на последний объект в цикле.

Другими словами, если у меня есть 3 поля ввода, хороший браузер будет вызывать событие фокуса на каждом из проходящих field1, field2 и field3 как "this" соответственно.

В IE все 3 поля при запуске события фокуса передают field3 как объект.

Есть ли решение?

Я также попробовал следующие параметры синтаксиса только для получения ошибок в IE:

thisField.attachEvent('onblur',function(event){toggleHelpText(this,event)});
thisField.attachEvent('onblur',function(this,event){toggleHelpText(thisField,event)});
thisField.attachEvent('onblur',function(this,event){toggleHelpText(this,event)});

2 ответа

Решение:

Это была моя оригинальная логика:

for loop...
    attach events to each item passing object[i]

Это работало нормально, за исключением IE, где один и тот же объект передавался каждому слушателю событий (последний объект в массиве).

Исправление должно сделать это:

for loop...
    call function to attach events passing object[i]

function
    attach events to each item passing object[i]

Я сталкивался с этим раньше... это проблема закрытия, правильно?

Эй, в IE обработчики событий не предоставляют событие сгенерированное в качестве аргумента. Вы должны собрать его по window.event.

Другие вопросы по тегам