浅谈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 相关文章推荐
javascript indexOf函数使用说明
Jul 03 Javascript
用JS控制回车事件的代码
Feb 20 Javascript
js修改table中Td的值(定义td的双击事件)
Jan 10 Javascript
jquery写个checkbox——类似邮箱全选功能
Mar 19 Javascript
js 立即调用的函数表达式如何写
Jan 12 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
Oct 17 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
Dec 29 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
Nov 26 Javascript
bootstrap模态框远程示例代码分享
May 22 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
Jan 17 Javascript
详解微信小程序自定义组件的实现及数据交互
Jul 22 Javascript
JS如何生成动态列表
Sep 22 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执行速率优化技巧小结
2008/03/15 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
PHP文章按日期(月日)SQL归档语句
2012/11/29 PHP
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
在浏览器中打开或关闭JavaScript的方法
2015/06/03 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
jQuery实现可兼容IE6的遮罩功能详解
2017/09/19 jQuery
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
pm2启动ssr失败的解决方法
2019/06/29 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
python解析yaml文件过程详解
2019/08/30 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
python文件及目录操作代码汇总
2020/07/08 Python
夜大毕业自我鉴定
2013/10/11 职场文书
行政人事经理职位说明书
2014/03/05 职场文书
银行纠风工作实施方案
2014/06/08 职场文书
素质教育标语
2014/06/27 职场文书
2014年政教处工作总结
2014/12/20 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
股权投资协议书
2016/03/23 职场文书
导游词之徐州云龙湖
2019/11/19 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
python多线程方法详解
2022/01/18 Python