考虑以下 HTML 片段:
<form id="aspnetForm" onsubmit="alert('On Submit Run!'); return true;">
我需要使用jQuery或任何其他类型的JavaScript语法来移除/清除onsubmit事件处理程序并注册自己的处理程序。
考虑以下 HTML 片段:
<form id="aspnetForm" onsubmit="alert('On Submit Run!'); return true;">
我需要使用jQuery或任何其他类型的JavaScript语法来移除/清除onsubmit事件处理程序并注册自己的处理程序。
不使用任何库来实现这个:
document.getElementById("aspnetForm").onsubmit = null;
使用jQuery
$('#aspnetForm').unbind('submit');
然后继续添加你自己的内容。
bind()
方法添加的事件监听器。 - Matthew Scharley$('#aspnetForm').removeAttr('onsubmit').submit(function() {
alert("My new submit function justexecuted!");
});
更多细节请参见此链接。
这个问题已经很老了,但是考虑到主要的浏览器都放弃了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()"
的 “on”属性 定义的,否则此模式将有效地不会在元素或其子节点上留下任何事件处理程序。
.die()
已经被弃用 - ivan_pozdeev
document.getElementById("aspnetForm").removeAttribute('onsubmit')
- Rudie''
怎么样?我曾经在许多情况下看到过这种用法,代替了null
。哪个更好? - Synetechundefined
,但我尝试了delete
。 - Grault