浅谈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 相关文章推荐
js最简单的拖拽效果实现代码
Sep 24 Javascript
基于JQuery的日期联动实现代码
Feb 24 Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
Apr 28 Javascript
jQuery cdn使用介绍
May 08 Javascript
JavaScript字符串插入、删除、替换函数使用示例
Jul 25 Javascript
js css后面所带参数含义介绍
Aug 18 Javascript
JavaScript中获取样式的原生方法小结
Oct 08 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
Oct 05 Javascript
探讨跨域请求资源的几种方式(总结)
Dec 02 Javascript
原生JS实现瀑布流插件
Feb 06 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
May 10 Javascript
vue+element加入签名效果(移动端可用)
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实现的SESSION类
2014/12/02 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
python实现2014火车票查询代码分享
2014/01/10 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
python tkinter控件布局项目实例
2019/11/04 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
python实现PDF中表格转化为Excel的方法
2020/06/16 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
HTML5地理定位_动力节点Java学院整理
2017/07/12 HTML / CSS
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
中学自我评价
2014/01/31 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
2014年教研组工作总结
2014/11/26 职场文书
亲属关系公证书样本
2015/01/23 职场文书
结婚典礼主持词
2015/06/29 职场文书
2015年学校政教工作总结
2015/07/20 职场文书