浅谈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操作xml
Nov 04 Javascript
jQuery基于当前元素进行下一步的遍历
May 20 Javascript
JQuery CheckBox(复选框)操作方法汇总
Apr 15 Javascript
javascript实现查找数组中最大值方法汇总
Feb 13 Javascript
JavaScript手机振动API
Jun 11 Javascript
easyUI combobox实现联动效果
Jan 17 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
Feb 10 Javascript
JS打开摄像头并截图上传示例
Feb 18 Javascript
JavaScript伪数组用法实例分析
Dec 22 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
Jan 23 jQuery
vue3.0 CLI - 2.1 -  component 组件入门教程
Sep 14 Javascript
React传值 组件传值 之间的关系详解
Aug 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
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
php curl的深入解析
2013/06/02 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
Prototype Class对象学习
2009/07/19 Javascript
jQuery 技巧小结
2010/04/02 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
js,jq,css多方面实现简易下拉菜单功能
2017/05/13 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
2018/06/29 Javascript
javascript 代码是如何被压缩的示例代码
2020/05/06 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
制药工程专业职业生涯规划范文
2014/03/10 职场文书
大学专科求职信
2014/07/02 职场文书
小学运动会报道稿
2014/10/04 职场文书
看雷锋电影观后感
2015/06/10 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
新郎新娘致辞
2015/07/31 职场文书
SQL SERVER触发器详解
2022/02/24 SQL Server
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android