2013-07-03 11 views
5

Ich versuche, ein Klickereignis zu feuern, wenn das Dokument angeklickt wird, es sei denn, es gibt einen Klick auf ein Div habe ich mit einem bestimmten Klassennamen.not() Methode auf jquery Selektor funktioniert nicht

Ich habe Folgendes versucht, aber das Ereignis wird nicht ausgelöst.

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

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

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

Wer weiß, was ich falsch mache?

Dank

* Update

Ich habe die

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

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

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

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

Aber es wird keine Unterscheidung in die div mit .class- geben, die ich ausschließen bin versucht. Das Ereignis wird bei jedem Klick auf das Dokument ausgelöst.

Hier ist die div von meinem html

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

Antwort

8

Sie fügen den Click-Handler an document selbst an, sodass er immer ausgelöst wird (es sei denn, ein anderer Handler verhindert dies).

Was sollten Sie stattdessen tun ist, um die delegated Form von .on verwenden:

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

Dieser legt nach wie vor der Event-Handler auf document, aber dieser Handler reagiert nur auf Klicks, deren Quelle entspricht dem :not(.class) Selektor: wenn die Ereignisse bubble up bis document jQuery ruft den Handler nur auf, wenn die Quelle mit dem Selektor übereinstimmt.

+0

+1. Super einfache Möglichkeit, Delegation/Bubbling mit guten URL-Ressourcen zu erklären. Korrigiere, wenn ich falsch liege, aber eine andere Vorgehensweise (weniger schön) ist, '' (Dokument) .click() '' '' '' (': not (.class)') zu machen. Click (function (e) {e.stopPropagation();}); '. Dadurch wird das Blubbern von ".class" auf sich selbst eingestellt und blubbert nicht bis zum Dokument. – RaphaelDDL

+1

@RaphaelDDL das sollte funktionieren, außer Sie sollten nicht verwenden - Sie wollen diese Klasse, um das Klicken des Dokuments zu verhindern. – jcsanyi

+0

@jcsanyi Wahr wahr. Ich habe es versucht, aber war schon nach 5 Minuten: P Aber ja, das richtige sollte '$ ('. Klasse'). Click (function (e) {e.stopPropagation();});'. Vielen Dank – RaphaelDDL

1

Das Problem ist, dass Ihre Wähler entweder eine document oder bodyohne die Klasse class kein class Element im Inneren Ziel versucht, können Sie versuchen, etwas wie:

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

Oder:

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

Verwenden Sie die :not selector.

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

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

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