Теряется 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 теряется.

Это пример "тепличный". Обработчик нужно перегружать. Есть вариант перелопатить старый скрипт, но это не лучший выход.
 

phprus

Moderator
Команда форума
smartello
Перед присваиванием функции elements.onfocus сохраняй this в переменную, и уже ее используй внутри обработчика.

Кроме того непонятны махинации с elements.onfocus и currentFunc. Не проще ли использовать attachEvent или addEventListener ?
 

smartello

Новичок
phprus
Вот для этого и нужны форумы! Спасибо гигантское. Просто надо было использовать аттачЭвент и эддЭвеЛистнер
 

dimagolov

Новичок
smartello
а как это this теряется? this всегда есть и всегда указывает на текущий контекст. другое дело, что текущий контекст может оказаться или в момент присваивания обработчика или в момент его исполнения не тем, что вы предпологали, но это уже вопрос кривизны рук и недопонимания того, как работает интерпритатор JavaScript.
ссылка по теме и еще одна
 
Сверху