浅谈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 相关文章推荐
精解window.setTimeout()&amp;window.setInterval()使用方式与参数传递问题!
Nov 23 Javascript
jquery实现树形二级菜单实例代码
Nov 20 Javascript
jquery文本框中的事件应用以输入邮箱为例
May 06 Javascript
JavaScript截取、切割字符串的技巧
Jan 07 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
Jan 23 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
Jun 27 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
Jul 22 Javascript
在vue中使用公共过滤器filter的方法
Jun 26 Javascript
JavaScript实现预览本地上传图片功能完整示例
Mar 08 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
May 18 Javascript
vue中get请求如何传递数组参数的方法示例
Nov 08 Javascript
vue自定义标签和单页面多路由的实现代码
May 03 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
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
axios如何取消重复无用的请求详解
2019/12/15 Javascript
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
详解pyinstaller selenium python3 chrome打包问题
2019/10/18 Python
python range实例用法分享
2020/02/06 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
HTML5 canvas基本绘图之绘制曲线
2016/06/27 HTML / CSS
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
加拿大领先家居家具网上购物:Aosom.ca
2020/05/27 全球购物
工业自动化毕业生自荐信范文
2014/01/04 职场文书
学习雷锋寄语大全
2014/04/11 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
大学生个人先进事迹材料范文
2014/05/03 职场文书
英语分层教学实施方案
2014/06/15 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
银行贷款收入证明
2014/10/17 职场文书
2014年班级工作总结范文
2014/12/23 职场文书
处罚决定书范文
2015/06/24 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery