javascript event.preventDefault() 与return false区别实例分析
event.preventDefault() 和 return false 都可以终止程序,二者有什么异同点?
为了彻底弄清楚它们之间的区别,我不得不要先说一下javascript中两种事件传播模式:
- 捕获模式(capturing)
- 冒泡模式(bubbling)
捕获模式又称为“滴流模式”(trickling),个人认为滴流模式更好理解,滴流就是“从上向下”,而冒泡就是“从下向上”,好了,先记住这两种模式的特点。
同时你还要记住,这两种模式是为了干什么的?
这两种模式就是为了一点:决定html中“元素”(比如div, p, button)接收到事件的“顺序”!当然接收到事件的顺序不同,自然事件监听函数被触发的顺序就不同了,于是间接地就出现了监听函数被执行顺序的不同。
说一下事件传送机制就可以明白了
事件传递机制:
例如鼠标被按下后,mousedown事件被触发。
事件先从document->ancestor element->...->parent->event.target(在此元素上按下的鼠标)->parent->...->ancestor element->document.
事件走了一个循环(从documet到event.target再回到document),从documet到event.target的过程叫做捕获模式,从event.target到document的过程叫做冒泡模式。
下面我们再来了解一下e.preventDefault() e.stopPropagation()和return false的区别
- event.stopPropagation(); 事件停止冒泡到,即不让事件再向上传递到document,但是此事件的默认行为仍然被执行,如点击一个链接,调用了event.stopPropagation(),链接仍然会被打开。
- event.preventDefault(); 取消了事件的默认行为,如点击一个链接,链接不会被打开,但是此事件仍然会传递给更上一层的先辈元素。
- return false; 相当于同时调用了event.stopPropagation()和event.preventDefault(),事件的默认行为不会被执行,事件也不会冒泡向上传递。
实例讲解:
假如有这样一个页面:
<!DOCTYPE>
<html xml:lang="zh" lang="zh">
<head>
<title>test js 事件阻止</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
$(function(){
$("#parent").bind('click', fun_p);
$("#child").bind('click', fun_c);
$("#lnk").bind('click', fun_a);
});
function fun_p()
{
alert('parent');
}
function fun_c()
{
alert('child');
}
function fun_a()
{
alert('link');
}
</head>
<body>
<div id="parent">
<div id="child">
<a href="http://www.manongjc.com" id="lnk">码农教程</a>
</div>
</div>
</body>
</html>
在浏览器中打开html文件,点击其中的link("码农教程"),依次执行以下操作:
- 触发link的click事件alert('link')
- 向上传递click事件到父元素div(id为child的div),触发此div的click事件alert('child')
- 继续传递click事件到父元素div(id为parent的div),触发此div的click事件alert('parent')
- 执行link的默认动作,即跳转到码农教程
下面我们来修改一下代码:
修改一:在function fun_a里追加一行return false;
function fun_a()
{
alert('link');
return false;
}
在浏览器中打开html文件,点击其中的link("码农教程"),依次执行以下操作:
- 触发link的click事件alert('link')
上面的2,3,4步被阻止了
修改二:
在function fun_a里追加一行event.preventDefault():
function fun_a()
{
alert('link');
event.preventDefault();
}
在浏览器中打开html文件,点击其中的link("码农教程"),依次执行以下操作:
- 触发link的click事件alert('link')
- 向上传递click事件到父元素div(id为child的div),触发此div的click事件alert('child')
- 继续传递click事件到父元素div(id为parent的div),触发此div的click事件alert('parent')
link的默认动作被函数[preventDefault()]阻止了
修改三:
function fun_a里追加一行event.stopPragation():
function fun_a()
{
alert('link');
event.stopPropagation();
}
在浏览器中打开html文件,点击其中的link("码农教程"),依次执行以下操作:
- 触发link的click事件alert('link')
- 执行link的默认动作,即跳转到码农教程
向上传递事件被函数[stopPragation()]阻止了
修改四:
在function fun_a里追加两行event.preventDefault()和event.stopPragation()
function fun_a()
{
alert('link');
event.preventDefault();
event.stopPropagation();
}
在浏览器中打开html文件,点击其中的link("码农教程"),依次执行以下操作:
- 触发link的click事件alert('link')
与修改一种的结果一样,说明了return false;是包含了preventDefault和stopPragation两个功能的。
总结:
e.preventDefault(); //阻止事件的默认行为,比如a标签的转向,但不阻止事件的冒泡传播 e.stopPropagation() //阻止事件的冒泡传播,但不阻止其默认行为 returne false; //阻止两者(e.preventDefault()和e.stopPropagation())
- cordova插件- Geolocation
- SpringCloud服务安全连接
- maven编译时出现There are test failures
- SpringCloud Eureka自我保护机制
- cordova插件-File Transfer
- 什么是Kotlin?Java终结者?
- cordova插件-Device Motion
- cordova插件-Device Orientation
- cordova插件-Dialogs
- SpringCloud动态刷新配置信息
- cordova插件-Device
- hadoop源码解析2 - conf包中Configuration.java解析
- junit入门实例
- cordova插件- Network Information
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法