浅谈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 相关文章推荐
jquery Firefox3.5中操作select的问题
Jul 10 Javascript
javascript+css 网页每次加载不同样式的实现方法
Dec 27 Javascript
JavaScript中的property和attribute介绍
Dec 26 Javascript
javascript面向对象入门基础详细介绍
Sep 05 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
Jul 15 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
Aug 11 Javascript
D3.js中data(), enter() 和 exit()的问题详解
Aug 17 Javascript
jQuery和JavaScript节点插入元素的方法对比
Nov 18 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
Dec 13 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
Apr 20 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
Aug 31 Javascript
node.js通过Sequelize 连接MySQL的方法
Dec 28 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中使用gettext来支持多语言的方法
2011/05/02 PHP
限制复选框的最大可选数
2006/07/01 Javascript
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
JavaScript 常用函数
2009/12/30 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
jquery判断元素是否隐藏的多种方法
2014/05/06 Javascript
js星星评分效果
2014/07/24 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
JavaScript中匿名函数用法实例
2015/03/23 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
[00:27]DOTA2次级职业联赛 - Lilith战队宣传片
2014/12/01 DOTA
Python生成器(Generator)详解
2015/04/13 Python
Python3实现从指定路径查找文件的方法
2015/05/22 Python
python编程羊车门问题代码示例
2017/10/25 Python
python tkinter界面居中显示的方法
2018/10/11 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
应聘教师自荐信
2013/10/12 职场文书
《曹刿论战》教学反思
2014/03/02 职场文书
公民授权委托书
2014/10/15 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
Django中session进行权限管理的使用
2021/07/09 Python
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android