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 相关文章推荐
Javascript 日期对象Date扩展方法
May 30 Javascript
javascript 节点排序 2
Jan 31 Javascript
javascript中处理时间戳为日期格式的方法
Jan 02 Javascript
Bootstrap布局方式详解
May 27 Javascript
聊一聊JS中this的指向问题
Jun 17 Javascript
判断数组的最佳方法(推荐)
Oct 11 Javascript
Angular4实现图片上传预览路径不安全的问题解决
Dec 25 Javascript
使用JS模拟锚点跳转的实例
Feb 01 Javascript
使用use注册Vue全局组件和全局指令的方法
Mar 08 Javascript
react 移动端实现列表左滑删除的示例代码
Jul 04 Javascript
JS实现小星星特效
Dec 24 Javascript
低门槛开发iOS、Android、小程序应用的前端框架详解
Oct 16 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
PHP COOKIE设置为浏览器进程
2009/06/21 PHP
php命令行用法入门实例教程
2014/10/27 PHP
php 判断页面或图片是否经过gzip压缩的方法
2017/04/05 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
Laravel框架集合用法实例浅析
2020/05/14 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
微信小程序批量监听输入框对按钮样式进行控制的实现代码
2019/10/12 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python实现用于测试网站访问速率的方法
2015/05/26 Python
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
python制作朋友圈九宫格图片
2019/11/03 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
什么是python的函数体
2020/06/19 Python
浅析python函数式编程
2020/09/26 Python
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
2017/03/15 HTML / CSS
给交警的表扬信
2014/01/12 职场文书
火车的故事教学反思
2014/02/11 职场文书
2014年幼儿园元旦活动方案
2014/02/13 职场文书
高中运动会入场词
2014/02/14 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
导游词之河北邯郸
2019/09/12 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
代码复现python目标检测yolo3详解预测
2022/05/06 Python
Python序列化模块JSON与Pickle
2022/06/05 Python