浅谈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调试说明
Jun 07 Javascript
jquery操作select方法汇总
Feb 05 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
Aug 21 Javascript
利用BootStrap弹出二级对话框的简单实现方法
Sep 21 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
Oct 10 Javascript
JavaScript模块模式实例详解
Oct 25 Javascript
webpack 静态资源集中输出的方法示例
Nov 09 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
Apr 11 Javascript
小程序实现层叠卡片滑动效果
Aug 26 Javascript
VScode格式化ESlint方法(最全最好用方法)
Sep 10 Javascript
JavaScript对象原型链原理详解
Feb 05 Javascript
Vue中inheritAttrs的使用实例详解
Dec 31 Vue.js
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
phpstorm编辑器乱码问题解决
2014/12/01 PHP
PHP Ajax实现无刷新附件上传
2016/08/17 PHP
php多线程并发实现方法
2016/09/30 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
Js+XML 操作
2006/09/20 Javascript
jquery each()源代码
2011/02/14 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
2016/10/21 Javascript
jquery.cookie.js的介绍与使用方法
2017/02/09 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
原生javascript上传图片带进度条【实例分享】
2017/04/06 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
Vue基于NUXT的SSR详解
2017/10/24 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
python3+PyQt5使用数据库表视图
2018/04/24 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
2020/06/18 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
求职简历自荐信
2013/10/20 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
西式婚礼证婚词
2014/01/12 职场文书
学生生病请假条范文
2014/02/16 职场文书
国际商务英语专业求职信
2014/07/08 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
销售员试用期自我评价
2014/09/15 职场文书
五年级学生评语大全
2014/12/26 职场文书
2016年社区文体活动总结
2016/04/06 职场文书