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 相关文章推荐
js chrome浏览器判断代码
Mar 28 Javascript
js日期相关函数总结分享
Oct 15 Javascript
JS如何判断移动端访问设备并解析对应CSS
Nov 27 Javascript
jQuery html()方法使用不了无法显示内容的问题
Aug 06 Javascript
解决jquery实现的radio重新选中的问题
Jul 03 Javascript
AngularJS实现根据变量改变动态加载模板的方法
Nov 04 Javascript
使用JS动态显示文本
Sep 09 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
Jan 31 jQuery
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
Dec 30 Javascript
vue实现的请求服务器端API接口示例
May 25 Javascript
vue下canvas裁剪图片实例讲解
Apr 16 Javascript
vue npm install 安装某个指定的版本操作
Aug 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 n个不重复的随机数生成代码
2009/06/23 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
php代码架构的八点注意事项
2016/01/25 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
JavaScript经典效果集锦
2010/07/06 Javascript
ajax异步刷新实现更新数据库
2012/12/03 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
微信小程序 教程之列表渲染
2016/10/18 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
2018/11/28 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
温泉秘密:Onsen Secret
2020/07/06 全球购物
质量工程师岗位职责
2013/11/16 职场文书
应用数学自荐书范文
2013/11/24 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
代理协议书范本
2014/04/22 职场文书
如何写求职信
2014/05/24 职场文书
倡议书格式
2014/08/30 职场文书
2014年新教师工作总结
2014/11/08 职场文书
MySQL Router的安装部署
2021/04/24 MySQL
Mysql 如何实现多张无关联表查询数据并分页
2021/06/05 MySQL