浅谈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 相关文章推荐
Firefox和IE浏览器兼容JS脚本写法小结
Jul 07 Javascript
面向对象继承实例(a如何继承b问题)(自写)
Jul 01 Javascript
Javascript倒计时页面跳转实例小结
Sep 11 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
Apr 03 Javascript
js拼接html注意问题示例探讨
Jul 14 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
Oct 08 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
Apr 15 Javascript
高效的jquery数字滚动特效
Dec 17 Javascript
JavaScript面向对象分层思维全面解析
Nov 22 Javascript
js字符串与Unicode编码互相转换
May 17 Javascript
CountUp.js数字滚动插件使用方法详解
Oct 17 Javascript
js实现网页版贪吃蛇游戏
Feb 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 之Section与Cookie使用总结
2012/09/14 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
PHP开启opcache提升代码性能
2015/04/26 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
JS 图片缩放效果代码
2010/06/09 Javascript
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
python实现调用其他python脚本的方法
2014/10/05 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
Python flask框架post接口调用示例
2019/07/03 Python
基于Python的OCR实现示例
2020/04/03 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
幼儿园长自我鉴定
2013/10/17 职场文书
教师自我鉴定
2013/12/13 职场文书
管理信息系学生的自我评价
2014/01/11 职场文书
学习十八大演讲稿
2014/09/15 职场文书
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫