浅谈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 相关文章推荐
自动完成JS类(纯JS, Ajax模式)
Mar 12 Javascript
js中将具有数字属性名的对象转换为数组
Mar 06 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
Feb 27 Javascript
基于jquery ajax 用户无刷新登录方法详解
Apr 28 Javascript
JavaScript中检查对象property的存在性方法介绍
Dec 30 Javascript
JavaScript对象参数的引用传递
Jan 14 Javascript
详解angularjs中如何实现控制器和指令之间交互
May 31 Javascript
bootstrap table插件的分页与checkbox使用详解
Jul 23 Javascript
CSS3 动画卡顿性能优化的完美解决方案
Sep 20 Javascript
详解mpvue实现对苹果X安全区域的适配
Jul 31 Javascript
layui默认选中table的CheckBox复选框方法
Sep 19 Javascript
JavaScript中this的学习笔记及用法整理
Feb 17 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
解析php时间戳与日期的转换
2013/06/06 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
node.js中的fs.createWriteStream方法使用说明
2014/12/17 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
jQuery+css实现的换页标签栏效果
2016/01/27 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
2017/11/29 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
Python实现豆瓣图片下载的方法
2015/05/25 Python
Python数组并集交集补集代码实例
2020/02/18 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
日语专业推荐信
2013/11/12 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
硕士生找工作求职信
2014/07/05 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
2014领导干部四风问题查摆思想汇报
2014/09/13 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
导游词之青岛崂山
2019/12/27 职场文书
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android