Ответ 1
Для этого без каких-либо библиотек:
document.getElementById("aspnetForm").onsubmit = null;
Учитывая следующий фрагмент HTML:
<form id="aspnetForm" onsubmit="alert('On Submit Run!'); return true;">
Мне нужно удалить/очистить обработчик для события onsubmit и зарегистрировать свой собственный, используя jQuery или любой другой вкус использования JavaScript.
Для этого без каких-либо библиотек:
document.getElementById("aspnetForm").onsubmit = null;
С jQuery
$('#aspnetForm').unbind('submit');
И затем добавьте свой собственный.
Попробуйте, это работает для меня:
$('#aspnetForm').removeAttr('onsubmit').submit(function() {
alert("My new submit function justexecuted!");
});
Подробнее см. .
Для jQuery, если вы привязываете обработчики событий с помощью .live, вы можете использовать .die, чтобы развязать все экземпляры, связанные с .live.
Сейчас это древний вопрос, но, учитывая, что все основные браузеры отказались от EventTarget.getEventListeners()
, здесь есть способ удалить ВСЕ обработчики событий для элемента и его дочерних элементов и сохранить только структуру HTML. Мы просто клонируем элемент и заменяем его:
let e = document.querySelector('selector');
let clone = e.cloneNode(true);
e.replaceWith(clone);
Это такой же взлом, как и вытеснение прототипа addEventListener()
методом, который отслеживает каждую функцию-обработчик, но по крайней мере это можно использовать после того, как DOM уже подключен с другими событиями сценария.
Это также работает примерно так же, как и выше, используя jQuery clone()
вместо cloneNode()
:
let original = $('#my-div');
let clone = original.clone();
original.replaceWith(clone);
Этот шаблон фактически не оставит обработчиков событий на элементе или его дочерних узлах, если только они не были определены с помощью атрибута onclick="foo()"
.
Для jQuery off()
удаляет из него все обработчики событий, добавленные jQuery.
$('#aspnetForm').off();
Вызов .off() без аргументов удаляет все обработчики, прикрепленные к элементам.