Удалить все прослушиватели событий JavaScript для элемента и его дочерних элементов?
Можно ли удалить все прослушиватели событий для элемента и его дочерних элементов? Что-то вроде:
myElem.removeEventListeners();
Мне нужно это, потому что у меня сложный элемент с событиями, и мне нужно создать его копию - как статическое изображение, которое не реагирует на какие-либо события.
Ответы
Ответ 1
Если вы используете cloneNode
, прослушиватели событий не будут скопированы.
Если вам нужно надежное решение, лучше всего написать обертку для слушателей attach/detach
и следить за ними самостоятельно. Что-то вроде AddEvent Dean Edwards.
Ответ 2
Я не знаю одного, и поиск в Google не принес каких-либо очевидных результатов. Одно простое решение - создать функцию, которая циклически проходит через каждое событие и устанавливает ее на null
, например
function removeEvents(obj)
{
obj.onblur = null;
obj.onchange = null;
obj.onclick = null;
// ...
}
Вызвать эту функцию следующим образом: removeEvents(myElem)
. Полный список обработчиков событий JavaScript можно найти на http://www.elated.com/articles/events-and-event-handlers/.
Несомненно, есть более элегантный способ написать эту функцию, но я не знаю, есть ли более элегантный способ решить эту проблему. Было бы прекрасно, если бы кто-то знал об этом. Если вы связываете события через библиотеку JavaScript, такую как jQuery, могут быть другие, лучшие варианты.