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中操作时间之setYear()方法的使用
Jun 12 Javascript
学习JavaScript设计模式(接口)
Nov 26 Javascript
微信小程序 video详解及简单实例
Jan 16 Javascript
vue v-model表单控件绑定详解
May 17 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
Mar 02 Javascript
Node.js中的cluster模块深入解读
Jun 11 Javascript
使用async await 封装 axios的方法
Jul 09 Javascript
vue自动路由-单页面项目(非build时构建)
Apr 30 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
May 16 Javascript
vue点击标签切换选中及互相排斥操作
Jul 17 Javascript
Selenium执行JavaScript脚本的方法示例
Dec 31 Javascript
详解Vue的列表渲染
Nov 20 Vue.js
浅谈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
javascript入门·对象属性方法大总结
2007/10/01 Javascript
Extjs入门之动态加载树代码
2010/04/09 Javascript
Javascript中valueOf与toString区别浅析
2013/03/19 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
详解JavaScript基于面向对象之继承实例
2015/12/16 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
js实现特别简单的钟表效果
2020/09/14 Javascript
详解JavaScript中的数据类型,以及检测数据类型的方法
2020/09/17 Javascript
Openlayers实现点闪烁扩散效果
2020/09/24 Javascript
Python中的Classes和Metaclasses详解
2015/04/02 Python
Python正则表达式使用范例分享
2016/12/04 Python
Python向日志输出中添加上下文信息
2017/05/24 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
为什么说python适合写爬虫
2020/06/11 Python
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
机械工程师求职自我评价
2013/09/23 职场文书
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
物流专业求职计划书
2014/01/10 职场文书
少儿节目主持串词
2014/04/02 职场文书
护理专业自荐书
2014/06/04 职场文书
节约粮食标语
2014/06/18 职场文书
2014年党建工作总结
2014/11/11 职场文书
考研经验交流会策划书
2015/11/02 职场文书
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang
Python面试不修改数组找出重复的数字
2022/05/20 Python