js事件冒泡、事件捕获和阻止默认事件详解


Posted in Javascript onAugust 04, 2016

谈起JavaScript的 事件,事件冒泡、事件捕获、阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免。

1.事件冒泡
先来看一段代码:

var $input = document.getElementsByTagName("input")[0];
var $div = document.getElementsByTagName("div")[0];
var $body = document.getElementsByTagName("body")[0];

$input.onclick = function(e){
 this.style.border = "5px solid red"
 var e = e || window.e;
 alert("red")
}
 $div.onclick = function(e){
 this.style.border = "5px solid green"
 alert("green")
}
$body.onclick = function(e){
 this.style.border = "5px solid yellow"
 alert("yellow")
}

html代码

<div>
 <input type="button" value="测试事件冒泡" />
</div> 依次弹出”red“,"green","yellow"。

你的本意是触发button这个元素,却连同父元素绑定的事件一同触发。这就是事件冒泡。
如果对input的事件绑定改为:

$input.onclick = function(e){
 this.style.border = "5px solid red"
 var e = e || window.e;
 alert("red")
 e.stopPropagation();
}

这个时候只会弹出”red“,因为阻止了事件冒泡。

2.事件捕获
既然有事件的冒泡,也可以有事件的捕获,这是一个相反的过程。区别是从顶层元素到目标元素或者从目标元素到顶层元素。
来看一段代码:

$input.addEventListener("click", function(){
 this.style.border = "5px solid red";
 alert("red")
}, true)
$div.addEventListener("click", function(){
 this.style.border = "5px solid green";
 alert("green")
}, true)
$body.addEventListener("click", function(){
 this.style.border = "5px solid yellow";
 alert("yellow")
}, true)

这个时候依次弹出”yellow“,"green","red",这就是事件的捕获。

3.阻止默认事件
有一些html元素默认的行为,比如说a标签,点击后有跳转动作;form表单中的submit类型的input有一个默认提交跳转事件;reset类型的input有重置表单行为。如果你想阻止这些浏览器默认行为,JavaScript为你提供了方法。

var $a = document.getElementsByTagName("a")[0];
$a.onclick = function(e){
 alert("跳转动作被我阻止了")
 e.preventDefault();
 //return false;//也可以
}

<a href="http://keleyi.com">柯乐义</a>默认事件没有了。

既然return false 和 e.preventDefault()都是一样的效果,那它们有区别吗?当然有。
仅仅是在HTML事件属性 和 DOM0级事件处理方法中 才能通过返回 return false 的形式组织事件宿主的默认行为。

js事件冒泡、事件捕获和阻止默认事件详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
fromCharCode和charCodeAt 方法
Dec 27 Javascript
js截取函数(indexOf,join等)
Sep 01 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
Dec 09 Javascript
js获取页面传来参数的方法
Sep 06 Javascript
JQuery基础语法小结
Feb 27 Javascript
JavaScript中String.prototype用法实例
May 20 Javascript
原生JS:Date对象全面解析
Sep 06 Javascript
javascript编程开发中取色器及封装$函数用法示例
Aug 09 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
Oct 09 jQuery
JavaScript中的垃圾回收与内存泄漏示例详解
May 02 Javascript
vue-cli在 history模式下的配置详解
Nov 26 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
Nov 06 Javascript
使用伪命名空间封装保护独自创建的对象方法
Aug 04 #Javascript
全面解析Angular中$Apply()及$Digest()的区别
Aug 04 #Javascript
window.open不被拦截的简单实现代码(推荐)
Aug 04 #Javascript
js实现多图左右切换功能
Aug 04 #Javascript
window.open打开窗口被拦截的快速解决方法
Aug 04 #Javascript
浅谈js中子页面父页面方法 变量相互调用
Aug 04 #Javascript
JS图片等比例缩放方法完整示例
Aug 03 #Javascript
You might like
文章推荐系统(二)
2006/10/09 PHP
php数字转汉字代码(算法)
2011/10/08 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
关于php开启错误提示的总结
2019/09/24 PHP
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
2020/12/24 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
javascript中的replace函数(带注释demo)
2018/01/07 Javascript
vue中各选项及钩子函数执行顺序详解
2018/08/25 Javascript
vue中组件的3种使用方式详解
2019/03/23 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
python显示天气预报
2014/03/02 Python
python字典序问题实例
2014/09/26 Python
python根据路径导入模块的方法
2014/09/30 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
简单了解Django项目应用创建过程
2020/07/06 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
美国精油公司:Plant Therapy
2019/05/17 全球购物
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
世界经理人咨询有限公司面试
2014/09/23 面试题
室内设计自我鉴定
2013/10/15 职场文书
项目合作协议书范本
2014/04/16 职场文书
求职信的正确写法
2014/07/10 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
领导视察通讯稿
2015/07/18 职场文书