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


Posted in Javascript onOctober 20, 2016

本文实例为大家分享了js阻止冒泡默认事件方法,供大家参考,具体内容如下

阻止冒泡。冒泡简单的举例来说,儿子知道了一个秘密消息,它告诉了爸爸,爸爸知道了又告诉了爷爷,一级级传递从而引起事件的混乱,而阻止冒泡就是不让儿子告诉爸爸,爸爸自然不会告诉爷爷了。下面的domo就是很好的例子。

<!DOCTYPE html> 
<html> 
 
  <head> 
    <meta charset="UTF-8"> 
    <title></title> 
    <style type="text/css"> 
      #box { 
        width: 300px; 
        height: 300px; 
        background: red; 
        display: none; 
      } 
    </style> 
    <script type="text/javascript"> 
      window.onload = function() { 
          var btn = document.getElementById('btn'); 
          var box = document.getElementById('box'); 
          btn.onclick = function(ev) { 
            var oEvent = ev || event; 
            box.style.display = 'block'; 
            //oEvent.cancelBubble = true;//高版本浏览器 
            stopBubble(oEvent); 
            //在低版本的chrome和firefox浏览器中需要兼容性处理 
            //高版本chrome和firefox浏览器直接使用上面这行代码即可 
          } 
          document.onclick = function() { 
            box.style.display = 'none'; 
          } 
 
        } 
        //阻止冒泡事件的兼容性处理 
      function stopBubble(e) { 
        if(e && e.stopPropagation) { //非IE 
          e.stopPropagation(); 
        } else { //IE 
          window.event.cancelBubble = true; 
        } 
      } 
    </script> 
  </head> 
 
  <body> 
    <input type="button" id="btn" value="语言" /> 
    <div id="box"></div> 
  </body> 
 
</html>

我所实现的效果是:点击按钮btn让box显示,而点击其他地方则让box消失。
如果我不阻止冒泡的话,那么首先btn会触发点击时间,让盒子显示,但是由于box是包含在document中的,所以会向上冒泡又触发document的点击事件,盒子又消失。这个事件的执行顺序可以在不同的点击事件中使用alert来验证。关于cancelBubble的兼容性处理在高版本的chrome和firefox中已经不需要兼容处理了,直接使用oEvent.cancelBubble = true 即可。下面的阻止浏览器事件的兼容性处理在高版本浏览器中同样不需要。

默认事件。即浏览器本身具备的功能。

function preventDefa(e){ 
  if(window.event){ 
    //IE中阻止函数器默认动作的方式  
    window.event.returnValue = false;  
  } 
  else{ 
    //阻止默认浏览器动作(W3C)  
    e.preventDefault(); 
  }  
}

这种是兼容性写法,但是如果你只需要支持高版本浏览器的话,那么如上文一样,一句话即可。

btn.onclick = function (){ 
  return false; 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS中confirm,alert,prompt函数使用区别分析
Apr 01 Javascript
js setTimeout opener的用法示例详解
Oct 23 Javascript
jQuery实现跨域iframe接口方法调用
Mar 14 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
Jul 27 Javascript
原生js封装的一些jquery方法(详解)
Sep 20 Javascript
在 Node.js 中使用 async 函数的方法
Nov 17 Javascript
详解基于Node.js的HTTP/2 Server实践
May 31 Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 15 Javascript
webpack中如何使用雪碧图的示例代码
Nov 11 Javascript
node实现简单的增删改查接口实例代码
Aug 22 Javascript
小程序接口的promise化的实现方法
Dec 11 Javascript
Nuxt 项目性能优化调研分析
Nov 07 Javascript
浅谈JS中String()与 .toString()的区别
Oct 20 #Javascript
详解javascript事件绑定使用方法
Oct 20 #Javascript
angular源码学习第一篇 setupModuleLoader方法
Oct 20 #Javascript
jQuery动态创建元素以及追加节点的实现方法
Oct 20 #Javascript
JS中动态创建元素的三种方法总结(推荐)
Oct 20 #Javascript
yarn与npm的命令行小结
Oct 20 #Javascript
Bootstrap 网站实例之单页营销网站
Oct 20 #Javascript
You might like
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
JS访问DOM节点方法详解
2016/11/29 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
2017/11/17 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
5个很好的Python面试题问题答案及分析
2018/01/19 Python
python3.x上post发送json数据
2018/03/04 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
python 创建一维的0向量实例
2019/12/02 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
Python基于template实现字符串替换
2020/11/27 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
要账委托书范本
2014/09/15 职场文书
党的群众路线教育实践活动对照检查材料
2014/09/22 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
Python OpenCV实现图形检测示例详解
2022/04/08 Python
Mysql将字符串按照指定字符分割的正确方法
2022/05/30 MySQL