浅谈javascript事件取消和阻止冒泡


Posted in Javascript onMay 26, 2015

取消默认操作

w3c的方法是e.preventDefault(),IE则是使用e.returnValue = false;

在支持addEventListener()的浏览器中,也能通过调用时间对象的preventDefault()方法取消时间的默认操作。不过,在IE9之前的IE中,可以通过设置事件对象的returnValue属性为false来达到同样的效果。下面的代码假设一个事件处理程序,它使用全部的三种取消技术:

function cancelHandler(event){
  var event = event || window.event;  //用于IE
  if(event.preventDefault) event.preventDefault();  //标准技术
  if(event.returnValue) event.returnValue = false;  //IE
  return false;   //用于处理使用对象属性注册的处理程序
}

当前的DOM事件模型草案定义了Event对象属性defaultPrevented。

return false

javascript的return false只会阻止默认行为,而是用jQuery的话则既阻止默认行为又防止对象冒泡。

下面这个使用原生JS,只会阻止默认行为,不会停止冒泡

<div id='div'  onclick='alert("div");'>
<ul  onclick='alert("ul");'>


<li id='ul-a' onclick='alert("li");'><a href="http://caibaojian.com/"id="testB">caibaojian.com</a></li>

</ul>

</div>

var a = document.getElementById("testB");

a.onclick = function(){

return false;

};

阻止冒泡

w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true

在支持addEventListener()的浏览器中,可以调用事件对象的一个stopPropagation()方法已阻止事件的继续传播。如果在同一对象上定义了其他处理程序,剩下的处理程序将依旧被调用,但调用stopPropagation()方法可以在事件传播期间的任何时间调用,它能工作在捕获阶段、事件目标本身中和冒泡阶段。

IE9之前的IE不支持stopPropagation()方法。相反,IE事件对象有一个cancleBubble属性,设置这个属性为true能阻止事件进一步传播。(IE8及之前版本不支持事件传播的捕获阶段,所以冒泡是唯一待取消的事件传播。)

当前的DOM事件规范草案在Event对象上定义了另一个方法,命名为stopImmediatePropagation()。类似stopPropagation(),这个方法组织了任何其他对象的事件传播,但也阻止了在相同对象上注册的任何其他事件处理程序的调用。

<div id='div' onclick='alert("div");'>
<ul onclick='alert("ul");'>


<li onclick='alert("li");'>test</li>

</ul>

</div>

阻止冒泡

function stopHandler(event)

    window.event?window.event.cancelBubble=true:event.stopPropagation();

}

以上所述上就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
jQuery去掉字符串起始和结尾的空格(多种方法实现)
Apr 01 Javascript
jQuery实现数字加减效果汇总
Dec 16 Javascript
jQuery原理系列-css选择器的简单实现
Jun 07 Javascript
JS 实现可停顿的垂直滚动实例代码
Nov 23 Javascript
IE8兼容Jquery.validate.js的问题
Dec 01 Javascript
vue实现添加标签demo示例代码
Jan 21 Javascript
Ionic3 UI组件之autocomplete详解
Jun 08 Javascript
JavaScript条件判断_动力节点Java学院整理
Jun 26 Javascript
babel之配置文件.babelrc入门详解
Feb 22 Javascript
mocha的时序规则讲解
Feb 16 Javascript
通过微信公众平台获取公众号文章的方法示例
Dec 25 Javascript
JavaScript编写开发动态时钟
Jul 29 Javascript
javascript事件冒泡和事件捕获详解
May 26 #Javascript
解析javascript中鼠标滚轮事件
May 26 #Javascript
JS中字符串trim()使用示例
May 26 #Javascript
JSON字符串和对象之间的转换详解
May 26 #Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
May 25 #Javascript
Javascript实现飞动广告效果的方法
May 25 #Javascript
javascript自定义右键弹出菜单实现方法
May 25 #Javascript
You might like
跟我学Laravel之请求与输入
2014/10/15 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
Laravel 连接(Join)示例
2019/10/16 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
javascript 必知必会之closure
2009/09/21 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
js 自定义个性下拉选择框示例
2013/08/20 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
js 发布订阅模式的实例讲解
2017/09/10 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
JavaScript实现简单进度条效果
2020/03/25 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
python基础教程之分支、循环简单用法
2016/06/16 Python
Python实现字符串格式化的方法小结
2017/02/20 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
python简单实现AES加密和解密
2019/03/28 Python
Python  Django 母版和继承解析
2019/08/09 Python
通过实例简单了解Python中yield的作用
2019/12/11 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
护理专业毕业生推荐信
2013/10/31 职场文书
餐厅考勤管理制度
2014/01/28 职场文书
理发店策划方案
2014/06/05 职场文书
学生偷窃检讨书
2014/09/25 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
MySQL 数据库范式化设计理论
2022/04/22 MySQL