浅谈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中匿名函数的N种写法
Sep 08 Javascript
JS未跨域操作iframe里的DOM
Jun 01 Javascript
Vue.js每天必学之计算属性computed与$watch
Sep 05 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
Dec 23 Javascript
ES6/JavaScript使用技巧分享
Dec 14 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
Jul 26 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
Aug 23 jQuery
JS中min函数实例讲解
Feb 18 Javascript
mock.js模拟数据实现前后端分离
Jul 24 Javascript
layui表格分页 记录勾选的实例
Sep 02 Javascript
在vue中使用console.log无效的解决
Aug 09 Javascript
javascript实现点击小图显示大图
Nov 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
php命令行用法入门实例教程
2014/10/27 PHP
php 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
基于jquery的获取mouse坐标插件的实现代码
2010/04/01 Javascript
jquery 注意事项与常用语法小结
2010/06/07 Javascript
JavaScript 原型链学习总结
2010/10/29 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
Bootstrap的aria-label和aria-labelledby属性实例详解
2018/11/02 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
python读取xlsx的方法
2018/12/25 Python
python解析含有重复key的json方法
2019/01/22 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
python中温度单位转换的实例方法
2020/12/27 Python
几个Linux面试题笔试题
2016/08/01 面试题
团代会宣传工作方案
2014/05/08 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
小学班级特色活动方案
2014/08/31 职场文书
先进典型发言材料
2014/12/30 职场文书
小学班主任工作总结2015
2015/04/07 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python
详解thinkphp的Auth类认证
2021/05/28 PHP
pycharm代码删除恢复的方法
2021/06/26 Python
mysql的单列多值存储实例详解
2022/04/05 MySQL