Передача this в качестве параметра в функцию setTimeout
нужно восстановить значение кнопки, которая была нажата, через определенный промежуток времени.
помогите пожалуйста, не получается разобраться, делаю так:
var fnCounter = function() {
var tempButton = this.innerHTML;
this.innerHTML = 'Added';
setTimeout(fnRestore(this.innerHTML), 1000);
};
function fnRestore(elem) {
alert(elem);
elem = "222";
}
elem в функции fnRestore при этом имеет значение "Added", т.е. this.innerHTML был передан в функцию в качестве параметра. но elem = "222"; не меняет текст нажатой кнопки. кроме того fnRestore почему-то срабатывает сразу, а не через 1сек. если вызывать таймер таким образом setTimeout(fnRestore, 1000, this.innerHTML); то функция fnRestore срабатывает через 1сек, но с тем же результатом - я не могу присвоить текст кнопке внутри функции fnRestore. |
alecto,
10001 тема про this и setTimeout ... ждите или ищите ссылку на ближайшую тему про это. |
я находил и на вашем сайте и другие примеры, но код не работает.
|
alecto,
пока рабочий пример
<div id="test" >click</div>
<script>
var fnCounter = function() {
var tempButton = this;
this.innerHTML = 'Added';
setTimeout(function() {
fnRestore(tempButton)
}, 1000);
};
function fnRestore(elem) {
elem.innerHTML = '222';
}
test.addEventListener('click', fnCounter, false)
</script>
|
|
рони,
спасибо огромное! заработало! я так понял, что моя ошибка была в том, что я использовал var tempButton = this.innerHTML; вместо var tempButton = this; и функция fnRestore передается внутри анонимной функции
function() {
fnRestore(tempButton)
}
я только не понимаю, в чем разница, если синтаксис setTimeout: setTimeout(func, 1000); но первоначальный вариант setTimeout(fnRestore(this.innerHTML), 1000); работает неправильно. из-за параметра? потому что setTimeout(fnRestore, 1000, tempButton); работает корректно. |
Цитата:
|
alecto,
Пример потери контекста |
я как раз пробовал Решение 1: сделать обёртку, но не добился результата.
еще раз спасибо, внимательно перечитаю материал по ссылке. |
| Часовой пояс GMT +3, время: 10:51. |