У меня есть этот бит 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)});