【问题标题】:js click event on empty div class空div类上的js单击事件
【发布时间】:2017-02-28 21:08:41
【问题描述】:

我有如下三个 div:

这是JSFiddle

$(document).on('click', '.top', function (e) {					
  console.log("Empty space clicked");	
});		
.top{    
    width: 208px;
    text-transform: uppercase;
    text-align: left;
    height: 34px;
    background-color: #F44336;
    border-bottom: 1px solid #ea1c0d;
    color: #ffffff;
    box-shadow: 0px 3px 3px 0px rgba(50, 50, 50, 0.1);
    padding: 3px 8px;
    cursor: auto;
  }
 .inner_1{
    font-size: 12px;
 }
  .inner_2{
   font-size: 11px;
    text-transform: none;
    line-height: 12px;
    margin-top: 5px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    display: inline-block;
 }
 
 .inner_1:hover,  .inner_2:hover {
    cursor: pointer;
        text-decoration: underline;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div class="top">
  <div class="inner_1">Top content: This is full width</div>
  <div class="inner_2">Bottom</div>
</div>

从jsfiddle可以看出,当.top被点击时,它会显示一个日志。

但是,我想让它仅在单击空白空间时显示日志,而不是在单击 inner_1inner_2 div 类时显示日志(因为它在单击这两个类时显示日志为现在)。

实现这一目标的最佳方法是什么?

谢谢。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    使用 jquery 的 stopPropagation。这将阻止所有子 div 触发父 onClick

    $(document).on('click', '.top > div', function (e) {                    
      e.stopPropagation();
    });     
    

    编辑: 上面的代码建立在 OP 知道的基础上,但这种方式对浏览器来说更有效。

    $('.top > div').on('click', function (e) {                    
      e.stopPropagation();
    });     
    

    【讨论】:

    • 谢谢。只是一个快速的问题。 .top &gt; div的目的是什么?
    • @steveKim 它选择.top 内的所有直接后代(即子)div。如果子内容不仅限于 div,您可以使用 .top &gt; * 来定位任何元素。如果您还想定位所有孙子、曾孙等元素,请使用.top *,因为此选择器针对任意数量的嵌套元素...
    • 最后一点。这个解决方案效果很好。但是,为了提高效率,您希望绑定选择器(在本例中为 document)尽可能接近 .top 选择器,最好是直接父选择器。否则,事件可能最终会遍历 DOM 的多个级别以到达此绑定。对于较小的应用程序,您可能不会注意到任何变化,但对于较大的应用程序,它在内存管理方面会很粗糙。
    • 您替换了旧代码。我想我应该让你知道这是对你其他代码的补充。您已创建事件侦听器。你之前的那个是听“.top”元素的点击。我正在为“.top > div”元素添加 onClick 侦听器,这会阻止浏览器执行“.top”点击事件。 AKA 包括两个 XD
    • 是的。而且个人更容易阅读。 stackoverflow.com/questions/9418991/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    相关资源
    最近更新 更多