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 document.referrer 用法
Apr 30 Javascript
JavaScript传递变量: 值传递?引用传递?
Feb 22 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
May 01 Javascript
JS获取地址栏参数的两种方法(简单实用)
Jun 14 Javascript
JS中使用FormData上传文件、图片的方法
Aug 07 Javascript
AngularJs expression详解及简单示例
Sep 01 Javascript
纯javascript版日历控件
Nov 24 Javascript
JS小数转换为整数的方法分析
Jan 07 Javascript
ES6中新增的Object.assign()方法详解
Sep 22 Javascript
JS实现图片居中悬浮效果
Dec 25 Javascript
angularJS实现动态添加,删除div方法
Feb 27 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
Dec 11 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产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
php导出中文内容excel文件类实例
2015/07/06 PHP
Yii中表单用法实例详解
2016/01/05 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
Javascript 面向对象 命名空间
2010/05/13 Javascript
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
表单验证的完整应用案例探讨
2013/03/29 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
javascript编写简易计算器
2017/05/06 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
2018/01/25 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
angularJS1 url中携带参数的获取方法
2018/10/09 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
2019/08/02 jQuery
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
python读取oracle函数返回值
2016/07/18 Python
Python实现批量检测HTTP服务的状态
2016/10/27 Python
Python 绘图和可视化详细介绍
2017/02/11 Python
django中的setting最佳配置小结
2017/11/21 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
MaBelle玛贝尔香港官网:香港钻饰连锁店
2019/09/09 全球购物
仓库管理专业个人的自我评价
2013/12/30 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
2015年科研工作总结范文
2015/05/13 职场文书