5

如果单击文档,我正在尝试触发单击事件,除非单击具有特定类名的 div。

我尝试了以下方法,但该事件不会触发。

$(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 进行任何区分。对文档的任何点击都会触发该事件。

这是我的 html 中的 div

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

3 回答 3

8

您正在将点击处理程序附加到document自身,因此它将始终触发(除非其他一些处理程序阻止它)。

您应该做的是使用以下委托形式.on

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

这仍然将事件处理程序附加到 上document,但此处理程序仅响应源与:not(.class)选择器匹配的单击:当事件冒泡documentjQuery 时,仅当源与选择器匹配时才调用处理程序。

于 2013-07-03T21:25:45.793 回答
1

问题是您的选择器试图定位一个documentbody 没有该类class而不是其中的一个class元素,您可以尝试以下操作:

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

或者:

$(document).find(':not(.class)').click(function(){
于 2013-07-03T21:25:37.870 回答
1

使用:not 选择器

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

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

$("body:not(.thisclass)").doAction();
于 2013-07-03T21:26:03.430 回答