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 相关文章推荐
JavaScript Event事件学习第一章 Event介绍
Feb 07 Javascript
jQuery新闻滚动插件 jquery.roller.js
Jun 27 Javascript
深入分析js中的constructor和prototype
Apr 07 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
Mar 27 Javascript
JavaScript中获取样式的原生方法小结
Oct 08 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
Feb 28 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
May 30 Javascript
AngularJS 基础ng-class-even指令用法
Aug 01 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
Sep 27 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
Jun 19 Javascript
详解浏览器缓存和webpack缓存配置
Jul 06 Javascript
详解基于Wepy开发小程序插件(推荐)
Aug 01 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
PHP+DBM的同学录程序(1)
2006/10/09 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
PHP在网页中动态生成PDF文件详细教程
2014/07/05 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
node操作mysql数据库实例详解
2017/03/17 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
vue中的provide/inject的学习使用
2018/05/09 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
python开发中module模块用法实例分析
2015/11/12 Python
Python实现字符串格式化的方法小结
2017/02/20 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
python3对接mysql数据库实例详解
2019/04/30 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
基于python图像处理API的使用示例
2020/04/03 Python
Python实现一个优先级队列的方法
2020/07/31 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
世界上最好的帽子:Tilley
2016/11/27 全球购物
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
linux面试题参考答案(2)
2015/12/06 面试题
工程招投标邀请书
2014/01/26 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
导师对论文的学术评语
2015/01/04 职场文书
Python自动化测试PO模型封装过程详解
2021/06/22 Python
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android