右键、阻止冒泡

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了右键、阻止冒泡相关的知识,希望对你有一定的参考价值。

参考技术A 1.1. 首先我们来看原生JS取消事件冒泡方法:
e.stopPropagation(); //非IE浏览器
window.event.cancelBubble = true; //IE浏览器
1.2. 原生JS阻止默认事件方法:
e.preventDefault(); //非IE浏览器
window.event.returnValue = false; //IE浏览器

2..2. vue.js阻止默认事件
//只需将click改成click.prevent

3.1. 右键阻止默认
@contextmenu.prevent="rightClick( popover$index , day)"
3.2. 右键不阻止默认
@contextmenu="rightClick( popover$index , day)"

firefox鼠标右键bug

需求:点击输入框,显示下拉框,在输入框和下拉框区域鼠标右击时,下拉框保持显示状态,点击其他区域则消失。
原理很简单,给input绑定点击事件,点击后下拉框block,阻止input冒泡,点击document下拉框none。在chrome下这样做没问题,但是在firefox鼠标右键时,会触发click事件,即使阻止了冒泡也没用,解决方法是判断鼠标按键
demo code:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <title>点击其它地方关闭DIV</title>
</head>

<body>
  <input type="text" value="" id="text" />
  <div style="width:400px; height:200px;border:1px solid #000;display:none" id="con">
    <p>1111</p>
    <p><span>2222</span></p>
    <p>3333</p>
  </div>
  <script>
  function e(obj) {
    return document.getElementById(obj)
  }
  e(‘text‘).onclick = function(event) {
    e(‘con‘).style.display = ‘block‘;
    stopBubble(event);
  }
  // 点击con不消失
  e(‘con‘).onclick = function(event) {
     e(‘con‘).style.display = ‘block‘
     stopBubble(event);
  }
  document.onclick = function(event) {
    if (event.button === 2) {
      e(‘con‘).style.display = ‘block‘;
    } else {
      e(‘con‘).style.display = ‘none‘;
    }
  }
  //阻止冒泡函数
  function stopBubble(event) {
    if (event.stopPropagation) {
      event.stopPropagation()
    } else if (window.event) {
      window.event.cancelBubble = true
    }
  }
  </script>
</body>

</html>

以上是关于右键、阻止冒泡的主要内容,如果未能解决你的问题,请参考以下文章

HTML如何阻止事件冒泡?求源码分析

vue阻止事件冒泡,事件穿透

js阻止冒泡和默认事件(默认行为)详解

js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件

JS-阻止冒泡事件与事件委托

JS如何阻止事件冒泡