Сброс таймеров
Краткая постановка задачи
Сбросить все ранее выставленные через setInterval и setTimeout таймеры. Таймеры выставляли не мы и их идентификаторы нам неизвестны. Нужно сбросить все что когда-либо было запланировано. Для чего это? Есть чужая страница и есть мой скрипт для greasemonkey. Мой скрипт должен блокировать встроенное автообновление и управлять им самостоятельно. Технические детали Firefox 4 |
"Нормального" способа нет. Но можно сделать так:
var clearAllTimers = function(){ var lastID = 0; return function(){ var currentID = setTimeout(function(){}, 1); for(var id = currentID; id > lastID; id--){ clearTimeout(id); }; lastID = currentID; }; }(); setInterval(function(){ alert("test"); }, 100); clearAllTimers(); |
Спасибо. Тоже посещала такая мысль, но не уверен насчет того что идентификаторы выдаются по порядку. Время для экспериментов ;)
|
Не понимаю только зачем в этом примере используются две вложенные функции? Есть чего-то чего я не понимаю или это просто так? lastID ведь все равно будет обнуляться при каждом вызове?
|
Цитата:
Цитата:
|
Ммм... а можно ламерский вопрос... почему lastID не будет обнуляться? Втыкаю и не могу понять. Читаю
http://javascript.ru/tutorial/founda...last-vidimosti про это ни слова. |
Не туда втыкал: попробуй сюда:) Принцип такой:
var examlpe = function init(){ var x = "value"; return function result(){ return x; }; }();// ф-ция init инициализируется и сразу вызывается // переменной examlpe присвоевается результат ф-ции init, т.е. ф-ция result alert( examlpe );// examlpe - это ф-ция result, в scope которой есть переменная x alert( examlpe() ); |
То бишь в первом примере в переменную пишется не сама функция а функция которая находится в скопе этой функции и надо это затем чтобы в глобальном скопе не светился lastID... О мой моск...
|
Цитата:
Есть еще другой вариант: function clearAllTimers(){ var currentID = setTimeout(function(){}, 1); for(var id = currentID; id > clearAllTimers.lastID; id--) clearTimeout(id); clearAllTimers.lastID = currentID; }; clearAllTimers.lastID = 0;Но лично мне в таких случаях больше через замыкание нравится. |
Часовой пояс GMT +3, время: 20:46. |