浅谈JavaScript的事件


Posted in Javascript onFebruary 27, 2015

1、事件流

    事件流描述的是从页面中接收事件的顺序。但是IE提出的是冒泡流,而Netscape Communicator提出的是捕获流。
JavaScript事件流

2、事件冒泡(event bubbling)

    事件开始由最具体的元素(嵌套层次最深的那个节点)接收,然后逐级向上传播为较不为具体的节点(文档)。如下:

<html>

    <head>

        <title>事件冒泡</title>

    </head>

    <body>

        <div id="myDiv">点击我</div>

    </body>

</html>

window.onload = function(){

    var obj = document.getElementById("test");

    obj.onclick = function(){

        alert(this.tagName);

    };

    document.body.onclick = function(){

        alert(this.tagName);

    };

    document.documentElement.onclick = function(){

        alert(this.tagName);

    };

    document.onclick = function(){

        alert("document");

    };

    window.onclick = function(){

        alert("window");

    }

};

事件传播顺序:div——>body——>html——>document

注意:
    现代所有浏览器都支持冒泡事件,但实现还有一些差别。IE5.5及更早版本中的事件冒泡会直接从body跳到document(不执行html)。Firefox、Chrome和Safari则将事件一直冒泡到window对象。

3、停止事件冒泡和取消默认事件

 a. 获取事件对象

function getEvent(event) {

// window.event IE

// event 非IE

return event || window.event;

}

 b 功能:停止事件冒泡 
function stopBubble(e) {

 // 如果提供了事件对象,则这是一个非IE浏览器

 if ( e && e.stopPropagation ) {

 // 因此它支持W3C的stopPropagation()方法

 e.stopPropagation();

} else {

 // 否则,我们需要使用IE的方式来取消事件冒泡

window.event.cancelBubble = true;

}

}

 c. 阻止浏览器的默认行为

function stopDefault( e ) {

     // 阻止默认浏览器动作(W3C)

     if ( e && e.preventDefault ) {

         e.preventDefault();

     } else {

        // IE中阻止函数器默认动作的方式

        window.event.returnValue = false;

    }

    return false;

}
Javascript 相关文章推荐
javascript 类型判断代码分析
Mar 28 Javascript
用js解决数字不能换行问题
Aug 10 Javascript
jQuery为iframe的body添加click事件的实现代码
Apr 07 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
Nov 20 Javascript
Vue2递归组件实现树形菜单
Apr 10 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
Aug 22 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
Jan 30 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
Sep 15 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
Apr 02 Javascript
基于js实现抽红包并分配代码实例
Sep 19 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
Dec 12 Javascript
如何在JavaScript中创建具有多个空格的字符串?
Feb 23 Javascript
JS实现图片放大镜效果的方法
Feb 27 #Javascript
浅谈javascript中的instanceof和typeof
Feb 27 #Javascript
js实现有时间限制消失的图片方法
Feb 27 #Javascript
js用拖动滑块来控制图片大小的方法
Feb 27 #Javascript
javascript中局部变量和全局变量的区别详解
Feb 27 #Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
Feb 27 #Javascript
JavaScript中Function详解
Feb 27 #Javascript
You might like
PHP学习笔记之一
2011/01/17 PHP
PHP获取MAC地址的函数代码
2011/09/11 PHP
url decode problem 解决方法
2011/12/26 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
php中使用sftp教程
2015/03/30 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
如何在PHP中使用数组
2020/06/09 PHP
javascript event 事件解析
2011/01/31 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
vue中根据时间戳判断对应的时间(今天 昨天 前天)
2019/12/20 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
windows下安装python paramiko模块的代码
2013/02/10 Python
利用python求相邻数的方法示例
2017/08/18 Python
Python语言的变量认识及操作方法
2018/02/11 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
python程序控制NAO机器人行走
2019/04/29 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
学习全国两会精神心得体会范文
2014/03/17 职场文书
新店开张活动方案
2014/08/24 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
python urllib库的使用详解
2021/04/13 Python
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
pycharm无法安装cv2模块问题
2022/05/20 Python