浅谈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 数据类型之Boolean类型分析介绍
Apr 19 Javascript
JS模拟自动点击的简单实例
Aug 08 Javascript
深入理解Javascript动态方法调用与参数修改的问题
Dec 10 Javascript
jquery队列queue与原生模仿其实现方法分享
Mar 25 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
Jun 10 Javascript
js全选实现和判断是否有复选框选中的方法
Feb 17 Javascript
JQuery中DOM事件绑定用法详解
Jun 13 Javascript
Javascript动画效果(2)
Oct 11 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
Aug 16 Javascript
JavaScript屏蔽Backspace键的实现代码
Nov 02 Javascript
JavaScript模拟实现自由落体效果
Aug 28 Javascript
详解ES6中的Map与Set集合
Mar 22 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数组索引与键值操作技巧实例分析
2015/06/24 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
JS中的两种数据类型及实现引用类型的深拷贝的方法
2018/08/12 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
Apache如何部署django项目
2017/05/21 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
Django项目后台不挂断运行的方法
2019/08/31 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
详解HTML5常用的语义化标签
2019/09/27 HTML / CSS
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
中软国际Java程序员笔试题
2014/07/19 面试题
考博自荐信
2013/10/25 职场文书
爱国演讲稿400字
2014/05/07 职场文书
竞选学委演讲稿
2014/09/13 职场文书
个人自我剖析材料
2014/09/30 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
教务处教学工作总结
2015/08/10 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js