浅谈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 硬盘序列号+其它硬件信息
Dec 23 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
Jan 09 Javascript
jQuery获取和设置表单元素的方法
Feb 14 Javascript
一个简单的jquery的多选下拉框(自写)
May 05 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
Jun 12 Javascript
详解如何用模块化的方式写vuejs
Dec 16 Javascript
vue.js $refs和$emit 父子组件交互的方法
Dec 20 Javascript
vue 设置路由的登录权限的方法
Jul 03 Javascript
Bootstrap table表格初始化表格数据的方法
Jul 25 Javascript
JavaScript事件发布/订阅模式原理与用法分析
Aug 21 Javascript
Vuex的实战使用详解
Oct 31 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
Jul 26 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中的 == 运算符进行字符串比较
2006/11/26 PHP
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
js进行表单验证实例分析
2015/02/10 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
2016/12/14 Javascript
jQuery快速实现商品数量加减的方法
2017/02/06 Javascript
vue.js实现条件渲染的实例代码
2017/06/22 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
Python类属性与实例属性用法分析
2015/05/09 Python
Python处理JSON数据并生成条形图
2016/08/05 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
Python之用户输入的实例
2018/06/22 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
python tkinter实现连连看游戏
2020/11/16 Python
银河香水:Galaxy Perfume
2019/03/25 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
装修致歉信
2014/01/15 职场文书
爱之链教学反思
2014/04/30 职场文书
施工质量承诺书范文
2014/05/30 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
《穷人》教学反思
2016/02/19 职场文书
CSS 伪元素::marker详解
2021/06/26 HTML / CSS