61

给定以下 HTML 片段:

<form id="aspnetForm" onsubmit="alert('On Submit Run!'); return true;">

我需要删除/清除 onsubmit 事件的处理程序,并使用 jQuery 或任何其他类型的 JavaScript 使用注册我自己的处理程序。

4

6 回答 6

84

要在没有任何库的情况下执行此操作:

document.getElementById("aspnetForm").onsubmit = null;
于 2009-04-29T19:51:12.903 回答
26

使用 jQuery

$('#aspnetForm').unbind('submit');

然后继续添加你自己的。

于 2009-04-29T19:41:24.470 回答
11

试试这个,这对我有用:

$('#aspnetForm').removeAttr('onsubmit').submit(function() {   
    alert("My new submit function justexecuted!"); 
});

有关更多详细信息,请参阅内容。

于 2010-06-09T22:47:48.187 回答
5

这是一个古老的问题,但鉴于主要浏览器都已放弃EventTarget.getEventListeners(),这里有一种方法可以删除元素及其子元素上的所有事件处理程序并仅保留 HTML 结构。我们只需克隆元素并替换它:

let e = document.querySelector('selector');
let clone = e.cloneNode(true);
e.replaceWith(clone);

这与使用跟踪每个处理函数的方法抢占原型一样多addEventListener(),但至少可以在 DOM 已经与另一个脚本的事件连接后使用。

这也与上面使用 jQueryclone()而不是cloneNode()

let original = $('#my-div');
let clone = original.clone();
original.replaceWith(clone);

这种模式将有效地在元素或其子节点上不留下任何事件处理程序,除非它们是使用“on”属性定义的,例如onclick="foo()".

于 2017-12-12T07:27:36.663 回答
3

对于 jQuery,off()从其中删除 jQuery 添加的所有事件处理程序。

$('#aspnetForm').off();

不带参数调用 .off() 会删除所有附加到元素的处理程序。

于 2018-06-08T03:54:55.317 回答
2

对于 jQuery,如果您使用 .live 绑定事件处理程序,您可以使用 .die 取消绑定所有与 .live 绑定的实例。

于 2011-03-29T12:40:07.020 回答