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中的运用上部
Nov 20 Javascript
javascript 拖放效果实现代码
Jan 22 Javascript
jquery中ajax学习笔记3
Oct 16 Javascript
使用闭包对setTimeout进行简单封装避免出错
Jul 10 Javascript
jquery学习总结(超级详细)
Sep 04 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
Dec 14 Javascript
vue实现简单实时汇率计算功能
Jan 15 Javascript
jQuery实现的滑块滑动导航效果示例
Jun 04 jQuery
在小程序中使用腾讯视频插件播放教程视频的方法
Jul 10 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
May 10 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
Nov 16 Javascript
vscode自定义vue模板的实现
Jan 27 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
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
YII2框架使用控制台命令的方法分析
2020/03/18 PHP
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
2011/01/06 Javascript
修复IE9&amp;safari 的sort方法
2011/10/21 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
用vue快速开发app的脚手架工具
2018/06/11 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
python实现下载文件的三种方法
2017/02/09 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
Django objects的查询结果转化为json的三种方式的方法
2018/11/07 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
使用python采集Excel表中某一格数据
2020/05/14 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
JPA的特点
2014/10/25 面试题
英语专业毕业生自我鉴定
2013/11/09 职场文书
家长建议怎么写
2014/05/15 职场文书
2015新年寄语大全
2014/12/08 职场文书
javascript之Object.assign()的痛点分析
2022/03/03 Javascript