それを行うためのnoobの方法は私が推測するでしょう
$('*').click(function(){...});
しかし、DOM内のすべてのオブジェクトのリスナーを登録しなくても、あらゆるタイプのクリックをキャッチできる方法はありますか?
ヘルプは素晴らしいでしょう。 =)
click
イベントはデフォルトで DOMのバブル になるため、次のようにclick
ハンドラーをルートにアタッチするだけです。
_$(document).click(function() {
//do something
});
_
途中の要素のハンドラーが event.stopPropagation()
または_return false
_を実行しない限り、ここをクリックできます。
ドキュメントでイベント委任を使用して、すべてのクリックをキャッチできます。
jQueryはtarget
のevent
プロパティを入力して、クリックされた要素を取得します。
_$(document).click(function(event){
// event.target is the clicked object
});
_
_event.target
_がクリックされた最も深い要素になることに注意してください。例:_<span>
_に_<a>
_がある場合、_<span>
_ではなく_<a>
_を取得します。
クリックをキャッチしたいが特定の要素(クラスなど)を取得したい場合は、次のようにします。
_$(document).click(function(event){
$(event.target).closest(".clickable").each(function(){
// "this" is your "clickable" clicked
});
});
_
途中の要素のイベントハンドラーが event.stopPropagation()
または_return false
_を実行しない限り、ここをクリックできます。
本体にカチッと付けるだけではどうですか?
$('body').click(function(e){ ... })
e.target
には、クリックされたものが含まれている必要があります
$('*').click( function() {...} )
は、.click()
を呼び出したときに存在していた要素のクリックのみをキャッチします。後で作成される可能性のある要素のクリックをキャッチするには、他の人が示唆しているように、body
またはdocument
にバインドする必要があります。
どうですか:
$('body').click(function(){...});
これはdom内のすべての可視ノードの親であるため、ボディをクリックするとすべてクリックされます。