【问题标题】:Background click event works for everything - fix?背景点击事件适用于一切 - 修复?
【发布时间】:2015-08-18 14:17:23
【问题描述】:

我的文档结构是这样的,非常简化:

<div id="background">
  <div id="button">I am a button!</div>
</div>

我使用 jquery .click() 向我的#background 添加点击事件,但是当点击#button 时它也可以工作。当我禁用按钮的指针事件时,它会失去功能。

我也尝试了以下结构:

<div id="background">
  <div id="button">I am a button!</div>
  <div id="fullscreen-click-bg"></div>
</div>
  • 其中#fullscreen-click-bgwidth:100%; height:100% 元素。仍然所有点击都通过按钮。

如何处理这种情况?我不希望我的鼠标点击传递元素。

【问题讨论】:

标签: jquery html css


【解决方案1】:

button是background的child,所以当button被点击时需要停止事件:

$('#button').click(function(e) {
    e.stopPropagation();
});

【讨论】:

  • 你确定#button在#fullscreen-click-bg上方吗?
【解决方案2】:

检查目标

 $('#background').click(function(e){
       if(e.target.id == 'background'){
       ...code for background...
       }
    });

 $('#background').click(function(e){
           if(e.target.id == 'background'){
           console.log('background directly clicked');
           }
        });
#background {
  width: 500px;
  height: 500px;
  background: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<div id="background">
  <div id="button">I am a button!</div>
  <div id="fullscreen-click-bg"></div>
</div>

或者您可以使用on 并传入false 来安排您的处理

 $(document).on('click', '#background', function(e){
               ...code for background...
           });
 $(document).on('click', '#button',false);

 $(document).on('click', '#background', function(e) {
   console.log('background directly clicked');
 });
 $(document).on('click', '#button', false);
#background {
  width: 500px;
  height: 500px;
  background: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<div id="background">
  <div id="button">I am a button!</div>
  <div id="fullscreen-click-bg"></div>
</div>

【讨论】:

  • 这无济于事,因为按钮是一个 div,即使您在标识符上进行选择,它仍然会触发对 html 的任何更改
  • @jimmyjansen,I don't want my mouse clicks to pass-through elements.,他可以通过检查它是否是答案中的按钮来模仿这种行为。如果是按钮,则退出
  • 这是一个糟糕的解决方案,因为它不是可重用的,也是不好的做法,这就是我所说的,OP 对此做什么是他的选择
  • 我同意 cmets 的不良做法 - 但是不能做相反的事情吗?我的意思是 - 检查点击的元素是否是事件目标,如果是,则处理。
  • 这太手动了 - 对每个 UI 元素都没有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 2017-06-10
  • 2019-07-29
  • 1970-01-01
相关资源
最近更新 更多