jQuery:单击函数排除子项。

试图把我的头围绕jQuery“.not()”函数,并遇到一个问题。 我想有父div是“可点击”,但如果用户点击一个子元素,脚本不会被调用。

$(this).not(children()).click(function(){ $(".example").fadeOut("fast"); }); 

html:

 <div class="example"> <div> <p>This content is not affected by clicks.</p> </div> </div> 

要做到这一点,停止点击使用.stopPagagation的孩子:

 $(".example").click(function(){ $(this).fadeOut("fast"); }).children().click(function(e) { return false; }); 

这将阻止孩子点击从他们的级别冒泡,所以家长不会收到点击。

.not()的用法有点不同,它会过滤掉select器中的元素,例如:

 <div class="bob" id="myID"></div> <div class="bob"></div> $(".bob").not("#myID"); //removes the element with myID 

对于点击,你的问题是, 点击一个孩子泡到父母 ,而不是你无意中将一个点击处理程序附加到孩子。

我正在使用以下标记,并遇到了同样的问题:

 <ul class="nav"> <li><a href="abc.html">abc</a></li> <li><a href="def.html">def</a></li> </ul> 

这里我使用了下面的逻辑:

 $(".nav > li").click(function(e){ if(e.target != this) return; // only continue if the target itself has been clicked // this section only processes if the .nav > li itself is clicked. alert("you clicked .nav > li, but not it's children"); }); 

就具体问题而言,我可以看到,工作如下:

 $(".example").click(function(e){ if(e.target != this) return; // only continue if the target itself has been clicked $(".example").fadeOut("fast"); }); 

或者当然是另一种方式:

 $(".example").click(function(e){ if(e.target == this){ // only if the target itself has been clicked $(".example").fadeOut("fast"); } }); 

希望有所帮助。

或者你也可以这样做:

 $('.example').on('click', function(e) { if( e.target != this ) return false; // ... // });