浅谈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 相关文章推荐
封装好的省市地区联动控件附下载
Aug 13 Javascript
使用jQuery的ajax功能实现的RSS Reader 代码
Sep 03 Javascript
js捕获鼠标滚轮事件代码
Dec 16 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
Mar 06 Javascript
在JavaScript中使用开平方根的sqrt()方法
Jun 15 Javascript
简单介绍JavaScript中字符串创建的基本方法
Jul 07 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
Nov 02 Javascript
vue2里面ref的具体使用方法
Oct 27 Javascript
微信小程序多音频播放进度条问题
Aug 28 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
Dec 11 jQuery
详解vue中v-bind:style效果的自定义指令
Jan 21 Javascript
从0搭建vue-cli4脚手架
Jun 17 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新手上路(五)
2006/10/09 PHP
ie6 动态缩略图不显示的原因
2009/06/21 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
详解PHP队列的实现
2019/03/14 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
2017/01/20 Javascript
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
layui使用templet格式化表格数据的方法
2019/09/16 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
python爬虫爬取某站上海租房图片
2018/02/04 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
python中reload重载实例用法
2020/12/15 Python
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
中专生毕业自我鉴定
2013/11/01 职场文书
个人党性剖析材料
2014/02/03 职场文书
班级文化标语
2014/06/23 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python