js中的preventDefault与stopPropagation详解


Posted in Javascript onJanuary 29, 2014

首先讲解一下js中preventDefault和stopPropagation两个方法的区别:
preventDefault方法的起什么作用呢?我们知道比如<a href="http://www.baidu.com">百度</a>,这是html中最基础的东西,起的作用就是点击百度链接到http://www.baidu.com,这是属于<a>标签的默认行为,而preventDefault方法就是可以阻止它的默认行为的发生而发生其他的事情。看一段代码大家就明白了:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JS阻止链接跳转</title>
<script type="text/javascript"> 
function stopDefault( e ) { 
if ( e && e.preventDefault ) 
   e.preventDefault(); 
    else 
   window.event.returnValue = false;     return false; 
} 
</script> 
</head>
<body>
<a href="http://www.baidu.com" id="testLink">百度</a> 
<script type="text/javascript"> 
var test = document.getElementById('testLink'); 
test.onclick = function(e) { 
   alert('我的链接地址是:' + this.href + ', 但是我不会跳转。'); 
   stopDefault(e); 
} 
</script>
</body>
</html>

此时点击百度链接,不会打开http://www.baidu.com,而只是弹出一个alert对话框。

preventDefault方法讲解到这里,stopPropagation方法呢?讲stopPropagation方法之前必需先给大家讲解一下js的事件代理。

事件代理用到了两个在JavaSciprt事件中常被忽略的特性:事件冒泡以及目标元素。当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发。这一过程被称为事件冒泡;这个事件从原始元素开始一直冒泡到DOM树的最上层。对任何一个事件来说,其目标元素都是原始元素,在我们的这个例子中也就是按钮。目标元素它在我们的事件对象中以属性的形式出现。使用事件代理的话我们可以把事件处理器添加到一个元素上,等待事件从它的子级元素里冒泡上来,并且可以很方便地判断出这个事件是从哪个元素开始的。

stopPropagation方法就是起到阻止js事件冒泡的作用,看一段代码。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xHTML1/DTD/xHTML1-transitional.dtd">
<HTML XMLns="http://www.w3.org/1999/xHTML" lang="gb2312">
<head>
<title> 阻止JS事件冒泡传递(cancelBubble 、stopPropagation)</title>
<meta name="keywords" content="JS,事件冒泡,cancelBubble,stopPropagation" />
<script>
function doSomething (obj,evt) {
 alert(obj.id);
 var e=(evt)?evt:window.event;
 if (window.event) {
  e.cancelBubble=true;// ie下阻止冒泡
 } else {
  //e.preventDefault();
  e.stopPropagation();// 其它浏览器下阻止冒泡
 }
}
</script>
</head>
<body>
<div id="parent1" onclick="alert(this.id)" style="width:250px;background-color:yellow">
 <p>This is parent1 div.</p>
 <div id="child1" onclick="alert(this.id)" style="width:200px;background-color:orange">
  <p>This is child1.</p>
 </div>
 <p>This is parent1 div.</p>
</div>
<br />
<div id="parent2" onclick="alert(this.id)" style="width:250px;background-color:cyan;">
 <p>This is parent2 div.</p>
 <div id="child2" onclick="doSomething(this,event);" style="width:200px;background-color:lightblue;">
  <p>This is child2. Will bubble.</p>
 </div>
 <p>This is parent2 div.</p>
</div>
</body>
</HTML>

大家运行一下上面的代码就明白了。
Javascript 相关文章推荐
php对mongodb的扩展(初识如故)
Nov 11 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
Mar 28 Javascript
小米公司JavaScript面试题
Dec 29 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
Nov 02 Javascript
Knockoutjs 学习系列(一)ko初体验
Jun 07 Javascript
数据结构中的各种排序方法小结(JS实现)
Jul 23 Javascript
Node.js connect ECONNREFUSED错误解决办法
Sep 15 Javascript
javascript prototype原型详解(比较基础)
Dec 26 Javascript
vue实现文章内容过长点击阅读全文功能的实例
Dec 28 Javascript
vue实现的双向数据绑定操作示例
Dec 04 Javascript
Node配合WebSocket做多文件下载以及进度回传
Nov 07 Javascript
详解一些适用于Node.js的命名约定
Dec 08 Javascript
js正则表达式中test,exec,match方法的区别说明
Jan 29 #Javascript
js的正则test,match,exec详细解析
Jan 29 #Javascript
js正则表达exec与match的区别说明
Jan 29 #Javascript
jquery实现input输入框实时输入触发事件代码
Jan 28 #Javascript
用jquery等比例控制图片宽高的具体实现
Jan 28 #Javascript
jQuery实现当按下回车键时绑定点击事件
Jan 28 #Javascript
用js正确判断用户名cookie是否存在的方法
Jan 28 #Javascript
You might like
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
2015/07/01 PHP
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
jQuery中noconflict函数的实现原理分解
2015/02/03 Javascript
关于延迟加载JavaScript
2015/05/05 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
python3音乐播放器简单实现代码
2020/04/20 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
详解Python with/as使用说明
2018/12/13 Python
详解python中sort排序使用
2019/03/23 Python
详解Python的数据库操作(pymysql)
2019/04/04 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
什么是事务?事务有哪些性质?
2012/03/11 面试题
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
老公爱的承诺书
2014/03/31 职场文书
代理协议书范本
2014/04/22 职场文书
合法的离婚协议书范本
2014/10/23 职场文书
先进员工事迹材料
2014/12/20 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
2015年工商所工作总结
2015/05/21 职场文书
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android