Передача 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, время: 03:55. |