Теряется this при перегрузке обработчика.

smartello

Новичок
Теряется this при перегрузке обработчика.

Срочно нужна помощь, мозг кипит.

Есть скрипт, использующий onFocus (и т.п.) объекта. В своём обработчике он использует this.

При перегрузке обработчика, выполняемой следующим образом:

var elements = document.getElementsByTagName(tagname);
for (i = 0; i < elements.length; i++)
{
if (typeof elements.onfocus == 'function')
{
currentFunc = elements.onfocus;

elements.onfocus = function() {
currentFunc();
}
}

Так вот после перегрузки this теряется.

Это пример "тепличный". Обработчик нужно перегружать. Есть вариант перелопатить старый скрипт, но это не лучший выход.
 
smartello
Перед присваиванием функции elements.onfocus сохраняй this в переменную, и уже ее используй внутри обработчика.

Кроме того непонятны махинации с elements.onfocus и currentFunc. Не проще ли использовать attachEvent или addEventListener ?
 
phprus
Вот для этого и нужны форумы! Спасибо гигантское. Просто надо было использовать аттачЭвент и эддЭвеЛистнер
 
smartello
а как это this теряется? this всегда есть и всегда указывает на текущий контекст. другое дело, что текущий контекст может оказаться или в момент присваивания обработчика или в момент его исполнения не тем, что вы предпологали, но это уже вопрос кривизны рук и недопонимания того, как работает интерпритатор JavaScript.
ссылка по теме и еще одна
 
Сверху