浅谈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传值 判断
Oct 26 Javascript
本地对象Array的原型扩展实现代码
Dec 04 Javascript
jquery中的事件处理详细介绍
Jun 24 Javascript
jQuery中outerWidth()方法用法实例
Jan 19 Javascript
angularJS提交表单(form)
Feb 09 Javascript
jQuery源码解读之addClass()方法分析
Feb 20 Javascript
浅谈JavaScript事件的属性列表
Mar 01 Javascript
jQuery获取URL请求参数的方法
Jul 18 Javascript
avalon js实现仿微博拖动图片排序
Aug 14 Javascript
Js制作点击输入框时默认文字消失的效果
Sep 05 Javascript
微信小程序 火车票查询实例讲解
Oct 17 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
Jul 19 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二维数组去重算法
2016/12/17 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
2020/12/16 PHP
Mootools 1.2教程 函数
2009/09/15 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
2017/11/01 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
Camper鞋西班牙官方网上商店:西班牙马略卡岛的鞋类品牌
2019/03/14 全球购物
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
傲盾软件面试题
2015/08/17 面试题
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
开办化妆品公司创业计划书
2013/12/26 职场文书
投资入股合作协议书
2014/10/28 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书
奖励通知
2015/04/22 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
美丽心灵观后感
2015/06/01 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
MySQL8.0.18配置多主一从
2021/06/21 MySQL
Python编写nmap扫描工具
2021/07/21 Python
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS