отмена выполнения обработчика...
приветствую всех...
вопрос такой: как остановить выполнение обработчика события из другого обработчика этого же события ?? конкретно в моем случае - я пишу плеер и нужно чтобы при клике на play устанавливался второй обработчик на ту же кнопку который будет останавлить проигрывание первого обработчика (тоесть обработчика который проигрывает), и наоборот (удалялся второй обработчик и ставился первый обратно чтобы снова начать проигрывание) привожу пример : var play = function() { doSomething(); removeHandler(buttonPlay, "click", pause); } var pause = function() { doAnotherthing(); removeHandler(buttonPlay, "click", play); } addHandler(buttonPlay, "click", play); addHandler(buttonPlay, "click", pause); function addHandler(element, event_name, handler) { try { element.addEventListener(event_name, handler, false); }catch(e) { element.attachEvent("on" + event_name, handler); } } function removeHandler(element, event_name, handler) { try { element.removeEventListener(event_name, handler, false); } catch(e) { try { element.detachEvent("on" + event_name, handler); } catch(ee) { element["on" + event_name] = null; } } } но по такой логике второй обработчик начинает выполняться только после того, как первый закончит свое выполнение, как сделать чтобы второй обработчик останавливал (прерывал) первый во время его выполнения второго и наоборот? |
Цитата:
|
danik.js,
но что писать вместо event ? название события ? (onclick, onmouseover,...) или ссылку на объект которая в обработчике первым параметром ? |
Цитата:
|
danik.js,
этот e.stopImmediatePropagation() в моем случае не помог вообще ((( он работает только в IE и OPERA, и останавливает только тогда когда обработчик закончит выполняться - например если в обработчике вызывается функция которая работает рекурсивно, то этот e.stopImmediatePropagation() ждет пока закончится рекурсия, мне нужно чтобы рекурсия прерывалась на клике на ту же кнопку что и запуска обработчика (в котором запускается эта рекурсивно работающая функция) - мой случай - function runCycle(callback, timer) { if (index < pics.length) { buttonPlay.src = "buttons/button_pause.png"; var id = setTimeout (function() { callback(); runCycle(callback, timer); }, timer); } else buttonPlay.src = "buttons/button_play.png"; } var runAll = function(e) { // это главный обработчик runCycle(playNext, 1000); // это рекурсивно выполняющаяся функция выполняющая все действия } addHandler(buttonPlay, "click", runAll); // вешаем обработчик |
Часовой пояс GMT +3, время: 16:00. |