2013-07-11 17 views
0

我想拥有jQuery中的空白区域单击/没有内容区域时讲述了一个点击事件:绑定点击事件到空白/地区一个div使用jQuery

我有一些带班的DIV:

<div id="products-area"> 
<div class="products"> 
    <div class="product"> 
     <div class="image-wrapper"></div> 
     <div class="handles"></div> 
    </div> 
    <div class="product"> 
     <div class="image-wrapper"></div> 
     <div class="handles"></div> 
    </div> 
     ¨ 
    <!-- I want to have a function to tell when clicks on "empty area". like here -->  
</div> 
</div> 

我这个尝试:

$("#products-area").on('click', '.products .product', function(){ 
    //Do something when clicked on a product 
}); 

$("#products-area").on('click', '.products', function(){ 
    if (!$(this).hasClass()) { //This obviously doesn't work 
     //Do something when the object click on is not a product or some div inside of the product-div 
     //but it has to be inside of #products-area 
    }    
});  

这就是我想要的东西:

当用户点击产品区域中的某个地方并且它不是产品(并且不是产品div中的某些div)时,请执行一些操作。

我该如何做到这一点?

回答

3

检查,如果事件的目标是相同的点击的元素.. 试试这个

$("#products-area").on('click', '.products', function(e){ 
    if(e.target == this){ 
    //do something... 
    } 
}); 
+0

现货!非常感谢! :-) – bestprogrammerintheworld

+0

欢迎...很高兴帮助.. – bipen

0

尝试

$("#products-area").on('click', function(e){ 
    var $target = $(e.target); 

    if(!$target.closest('.product').length){ 
     console.log('s') 
    } 
}); 

演示:Fiddle

1

检查事件target,看看它是否是.product.product的孩子使用.closest

$("#products-area").on('click', function(e){ 
    if($(e.target).closest('.product').length > 0) return; 
    alert('no product clicked!'); 
}); 

Demo

+0

谢谢!这是比bipens更好的解决方案吗?为什么/为什么不? – bestprogrammerintheworld

+2

Bipens答案很整齐;如果它适合你,那就去吧。我的代码监听'#products-area'中任何地方的所有点击,并明确丢弃产品或产品子级中的点击。 Bipens代码监听'.products'中的所有点击,并丢弃那些位于任何子元素上的点击。从你展示的场景中,两者都可以工作,但是如果你将其他元素添加到不是产品的'.products',我的代码将显示'no product clicked'警报,但是bipens代码不会处理作为*没有产品*点击。 –

+0

当然,两者可能最终都会成为理想的行为,因为我们不知道这个假设的未来元素会是什么。无论您最终使用哪种代码,只要确保知道它做了什么,以便您可以预测您的更改何时会打破它。 –

相关问题