给定以下 HTML 片段:
<form id="aspnetForm" onsubmit="alert('On Submit Run!'); return true;">
我需要删除/清除 onsubmit 事件的处理程序,并使用 jQuery 或任何其他类型的 JavaScript 用法注册我自己的处理程序。
给定以下 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!");
});
有关更多详细信息,请参阅此内容。
现在这是一个古老的问题,但鉴于主要浏览器都已放弃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()"
.