浅谈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 相关文章推荐
基于jquery的跟随屏幕滚动代码
Jul 24 Javascript
悬浮数字的实现案例
Feb 19 Javascript
Jquery动态添加及删除页面节点元素示例代码
Jun 16 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
Web开发必知Javascript技巧大全
Feb 23 Javascript
javascript回到顶部特效
Jul 30 Javascript
探究JavaScript中的五种事件处理程序方式
Dec 07 Javascript
js实现自动轮换选项卡
Jan 13 Javascript
canvas绘制表盘时钟
Jan 23 Javascript
vue + socket.io实现一个简易聊天室示例代码
Mar 06 Javascript
Vue学习笔记进阶篇之过渡状态详解
Jul 14 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
Mar 05 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 地址栏信息的获取代码
2009/01/07 PHP
PHP 图像尺寸调整代码
2010/05/26 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
js实现随机点名
2021/01/19 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
python获取android设备的GPS信息脚本分享
2015/03/06 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
python多线程并发实例及其优化
2019/06/27 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
介绍一下linux文件系统分配策略
2013/02/25 面试题
幼儿园新学期寄语
2014/01/18 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
学校运动会报道稿
2014/09/23 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
在vue中import()语法不能传入变量的问题及解决
2022/04/01 Vue.js