Сообщение от Irish.Tippler
|
В чём соль? Почему функция таймаута убирает указатель с текущего элемента?
|
соль в том, что Вы запутались\не знаете, что this во вложенных функциях равен window, или undefined, если скрипт исполняется в строгом режиме.
пример :
(function () {
alert(this.foo); // "bar"
(function () {
alert(this.foo); // undefined
alert(Object.prototype.toString.call(this)); // ибо this сменился на ГО\undefined.
})();
}).call({
foo: "bar"
});
собстно, тут практически (точнее, совсем другое, но эффект тот же) то же самое :
newElement.onclick = function () {
this.style.backgroundImage = 'url(./img/' + this.num + '.png)';
// вот в этой функции this сменится на window.
setTimeout(function () {
// а так как this.style вернёт undefined, появится то, что появилось :)
this.style.backgroundImage = 'none';
}, 1500);
}
как обойти ?
да просто сохранить контекст в локальной переменной - почему функция будет видеть локальную область видимости той функции, в которой определена - совершенно другой вопрос
newElement.onclick = function () {
*!*
var _this = this;
*/!*
this.style.backgroundImage = 'url(./img/' + this.num + '.png)';
setTimeout(function () {
// юзаем _this вместо this.
_this.style.backgroundImage = 'none';
}, 1500);
}