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中对循环语句的优化技巧深入探讨
Jun 06 Javascript
node.js中的fs.write方法使用说明
Dec 15 Javascript
js日期范围初始化得到前一个月日期的方法
May 05 Javascript
jQuery新窗口打开外链接
Jul 21 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
Nov 10 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
May 07 Javascript
什么是Vue.js框架 为什么选择它?
Oct 17 Javascript
详解vue组件中使用路由方法
Feb 12 Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
Mar 12 Javascript
ES6基础之 Promise 对象用法实例详解
Aug 22 Javascript
原生JS实现萤火虫效果
Mar 07 Javascript
JQuery Ajax如何实现注册检测用户名
Sep 25 jQuery
浅谈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实现文件上传二法
2006/10/09 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
.htaccess文件保护实例讲解
2011/02/06 PHP
PHP与C#分别格式化文件大小的代码
2011/05/14 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
jquery 日期分离成年月日的代码
2010/05/14 Javascript
JS与C#编码解码
2013/12/03 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
JavaScript模块详解
2017/12/18 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
浅析微信扫码登录原理(小结)
2018/10/29 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
Python 实现数组相减示例
2019/12/27 Python
Python中bisect的用法及示例详解
2020/07/20 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
介绍一下UNIX启动过程
2013/11/14 面试题
初一科学教学反思
2014/01/27 职场文书
协议书怎么写
2014/04/21 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
党员个人年度总结
2015/02/14 职场文书