Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Выключение обработчиков события из элемента


Автор: numerovan 14.6.2010, 13:41
Наткнулся на такую проблему - добавление и удаление обработчиков в необходимый момент.
Как это сделать пока не знаю.
Многие показывают пример, который расположен вот тут http://javascript.ru/tutorial/events/crossbrowser.
Делаю вроде как там написанно, но ни чего не получается.
Код

<div class="div_for_small_pic" numberofphoto="id" onClick="Event.remove(this, 'click', function(){});"></div>

Может есть какой нибудь хороший способ это осуществить, желательно кроссбраузерный.

Автор: нуп 14.6.2010, 16:01
на jquery есть bind/unbind

Автор: ksnk 14.6.2010, 16:59
numerovan, зачем это нужно? Какая задача решается? Используются ли какие-нибудь js-библиотеки?


Автор: ex3c 14.6.2010, 17:10
numerovan, detachEvent/removeEventListener.

Автор: numerovan 14.6.2010, 17:56
Цитата

на jquery есть bind/unbind 

bind/unbind хорошие функции конечно, но душа что-то к ним не лежит. Bind имеет свойство присоединять к себе события, как писалось в литературе может несолкько click-ов к себе присоединить.
Хотелось бы узнать как это делать (удалять/присоединять события) без помощи jQuery.

Цитата

зачем это нужно? Какая задача решается? Используются ли какие-нибудь js-библиотеки?

Узнать как можно сделать подобное через сам яваскрипт.
Задача такая - сделать следующее, в коде пропишу...
Код

<div class="div_for_small_pic" numberofphoto="id" onClick="вырубить все клики из обёрнутого набора; выполнить действие; снова включить возможность кликов"></div>

Цитата

numerovan, detachEvent/removeEventListener. 

эти фунции на всех браузерах будут работать ? Помоему нет.

Автор: ksnk 14.6.2010, 18:07
Цитата(numerovan @  14.6.2010,  17:56 Найти цитируемый пост)
эти фунции на всех браузерах будут работать ?

detachEvent будет работать на части броузеров, на остальной части будет работать removeEventListener. Написать функцию, которая будет таки вызыватся кроссброузерно - дело 3-х строк. 
Однако!
Обе эти функции могут снять ранее установленный обработчик событий, но только в случае если известна функция, которая ставилась как обработчик. если функция-обработчик неизвестна - снять обработчик нельзя.
Так что можно написать некую обертку над событиями, которая сохраняет и факт установки события на елемент и функцию и получить возможность удалять все ранее установленное скопом. Так поступает jQuery, так поступает и объект Event из примера.
Так что задачи, насколько я понял пока - это не решит.

Есть, правда, мысль о том, что в результате клонирования элемента установленные на JS обработчики событий не клонируются и сбрасываются, но эту мысль надо бы проверить 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)