2013-07-03 19 views
5

特定のクラス名を持つdivにクリックがない限り、ドキュメントがクリックされた場合にクリックイベントを発生させようとしています。jqueryセレクタのnot()メソッドが機能しません

私は以下を試しましたが、イベントは発生しません。

$(document).not(".class").click(function(){ 
     //code 
}); 

$(document).not("div.class").click(function(){ 
     //code 
}); 

$("body").not(".class").click(function(){ 
     //code 
}); 

誰かが間違っていることを知っていますか?

おかげ

*更新

私は、次の

$(document).on("click", ":not(.class)", function(){ 

$('*:not(.class)',document).click(function(){ 

$(document).find(':not(.class)').click(function(){ 

$("body:not(.thisclass)").doAction(); 

を試みた。しかし、それは私が除外しようとしている.classファイルでのdivに任意の区別を与えていません。このイベントは、ドキュメント上をクリックすると発生します。問題は、あなたのセレクタが、その中のいずれかなしdocumentまたはbodyクラスclassないclass要素ターゲットにしようということである。ここ

<div class="pictureBox" id="pictureBox2"> <!--content--></div> 

答えて

8

クリックハンドラーをdocumentに接続しているため、他のハンドラーがそれを防ぐことができない限り、常に起動します。あなたの代わりに何をすべき

.ondelegated形式を使用している:

$(document).on("click", ":not(.class)", function(){ 
     //code 
}); 

これはまだdocumentにイベントハンドラをアタッチしますが、このハンドラは、ソース:not(.class)セレクタに一致するクリックに応答します。際のイベントbubble updocument jQueryは、ソースがセレクタと一致する場合にのみハンドラを呼び出します。

+0

+1。良いURLリソースを使って委譲/バブリングを説明する非常に簡単な方法。もし私が間違っていれば正解しますが、 '$(document).click()'を '$( ':not(.class)') ){e.stopPropagation();}); '。これにより '.class'からのバブリングがドキュメント上で止まらなくなります。 – RaphaelDDL

+1

@RaphaelDDLはうまくいきます。あなたが使ってはならないことを除いて、あなたはそのクラスがドキュメントのクリックを防ぐために必要です。 – jcsanyi

+0

@jcsanyi True true。私は編集しようとしましたが、既に5分を過ぎていました:Pしかし、正しいのは '$( '。class')です。ありがとう – RaphaelDDL

1

私のHTMLからdivのですが、あなたのような何かを試すことができます。

$('*:not(.class)',document).click(function(){ 

または:

$(document).find(':not(.class)').click(function(){ 
1

:not selectorを使用してください。

$("body:not(#thisid)").doAction(); 

$("body:not(#thisid.thisclass)").doAction(); 

$("body:not(.thisclass)").doAction(); 
関連する問題