次の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!");
});
詳細については、 this を参照してください。
JQueryの場合、 off()
は、jQueryによって追加されたすべてのイベントハンドラーを削除します。
$('#aspnetForm').off();
引数なしで.off()を呼び出すと、要素にアタッチされているすべてのハンドラーが削除されます。
JQueryの場合、.liveでイベントハンドラーをバインドしている場合、.dieを使用して、.liveでバインドされたすべてのインスタンスのバインドを解除できます。
これは今では古くからの質問ですが、主要なブラウザがEventTarget.getEventListeners()
をすべて放棄していることを考えると、[〜#〜] all [〜#〜]要素とその子のイベントハンドラー。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"属性 で定義されていない限り、要素またはその子ノードにイベントハンドラーが事実上残されません。