Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как удалить все обработчики события элемента (https://javascript.ru/forum/misc/24376-kak-udalit-vse-obrabotchiki-sobytiya-ehlementa.html)

FINoM 27.12.2011 23:11

Как удалить все обработчики события элемента
 
element.removeEventListener(type, listener, useCapture);

Для того, чтоб удалить какой-либо обработчик события, нужно иметь функцию, которая навешивалась на событие. Что делать, если все обработчики создавались, используя безымянные функции?

melky 27.12.2011 23:17

создать элемент заново, скопировав все атрибуты и все children.

ЗЫ был такой вопрос. но я не помню, cloneNode(true) помог или нет.. но раз в голове осел гавноспособ, значит, что не помог :)

FINoM 27.12.2011 23:19

Цитата:

Сообщение от melky
создать элемент заново, скопировав все атрибуты и все children.

Если хочется удалить конкретное событие, то такой способ не прокатит.

trikadin 27.12.2011 23:22

FINoM, низзя. Только через собственные реализации.

melky 27.12.2011 23:23

а, да. это для всех событий.

предварительный ответ - нет. ведь для удаления одного из обработчиков вы должны знать, что удалять то будете ?

FINoM 27.12.2011 23:26

Цитата:

Сообщение от melky
ведь для удаления одного из обработчиков вы должны знать, что удалять то будете ?

Понятно. Вот что значит jQuery головного мозга :D

trikadin 27.12.2011 23:28

Цитата:

Сообщение от FINoM
Понятно. Вот что значит jQuery головного мозга

:lol::lol:

FINoM 27.12.2011 23:37

Цитата:

Сообщение от trikadin
Только через собственные реализации.

Как грамотно будет реализовать? Вижу такое решение: к элементу добавить свойство "eventHandlers" и в нем хранить объект с массивами событий, типа так:
node.eventHandlers = {
  click: [function(){}, function(){}],
  mouseover: [function(){}, function(){}]
  ...
}

Говнокод?

trikadin 27.12.2011 23:41

Цитата:

Сообщение от FINoM
Говнокод?

Нет. Да все так делают, того же Резига почитать, или в код популярных (и не очень) библиотек посмотреть.

FINoM 27.12.2011 23:43

Ок, спасибо.


Часовой пояс GMT +3, время: 13:31.