2016-04-07 3 views
2

ページ上のJavaScriptコードの実行中に添付されたすべてのイベントハンドラ/リスナを何らかの形でリセットしてデフォルト値に戻すことはできますか? JavaScriptのサポートなしでページが読み込まれたかのように?JavaScript:すべてのイベントハンドラをデフォルトに戻す/カスタムハンドラを無効にする

私は、例えば、jQueryの$(selector).off()との個々の要素にハンドラをリセットすることができることを知っているが、まだ別の「賢い」のサイトには、右クリックし、Ctrlキー+ A、Ctrlキー+矢印またはそのような何かを上書きしたときに、私はちょうどしたいですそれをすべてオフにする - 時には、私は、コードを掘り下げてそれを掘り起こす傾向がなく、よりシンプルでワンサイズのソリューションを好むだろう。 1つはありますか?

更新:類似の質問が見つかりました Remove All Event Listeners of Specific Type - ここでは、特定のイベントタイプでは不可能と回答しました。 2016年現在でもそれは本当ですか?

+0

セレクターとして「*」を使用することは難しいと思いますが、それでもオブジェクトに接続されていない他のすべてのイベントはありますか?「*」にはウィンドウが含まれていますか?挑戦し続ける! – fucethebads

答えて

2

多分あなたはこれを試してみたいですか?

$("*").unbind();

http://www.w3schools.com/jquery/event_unbind.asp

+0

jQueryによって添付されたハンドラでのみ動作します。誰かが '.addEventListener'を直接使うと、あなたは不運です。 – Amadan

+0

ええ、残念ながら、onXXXハンドラでも動作しないようです。 – Kanpeki

1

このような何かが可能でなければなりません(私は試していない):

executes at document start(同様のブラウザ拡張用)というのGreaseMonkeyスクリプトまたはブラウザの拡張機能を作成します。 EventTarget.addEventListenerを再定義して、イベント名、ターゲット、ハンドラを配列に追加し、元の関数を呼び出す必要があります。 これで、配列全体とremoveEventListenerすべてを自由に反復処理できます。代わりに、より積極的なアプローチのために、EventTarget.addEventListenerをノーオペレーションに再定義することができます。

これは、onXXXXXフィールドとして宣言されたハンドラを解決しません。手動でseek and destroyする必要があります。

0

あなたが特定のイベントをアンバインドしたい場合は、クリックのように、試してみて、このようなbody要素のすべての子、を反復:

$('body').children().off('click'); 

ここJSFiddleです。

複数の異なるイベントをバインド解除する必要がある場合は、関数を作成し、イベントの配列を渡してアンバインドしてみてください。

+0

より良い解決策のために林元の答えをチェックしてください。 –

関連する問題