浅谈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 相关文章推荐
举例详解Python中smtplib模块处理电子邮件的使用
Jun 24 Javascript
javascript先序遍历DOM树的方法
Feb 27 Javascript
深入解析JavaScript中函数的Currying柯里化
Mar 19 Javascript
js获取隐藏元素的宽高
Feb 24 Javascript
ionic2自定义cordova插件开发以及使用(Android)
Jun 19 Javascript
node实现简单的反向代理服务器
Jul 26 Javascript
jQuery模拟爆炸倒计时功能实例代码
Aug 21 jQuery
vue + vuex todolist的实现示例代码
Mar 09 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
May 17 Javascript
微信小程序实现横向增长表格的方法
Jul 24 Javascript
vue+element 模态框表格形式的可编辑表单实现
Jun 07 Javascript
JS数组及对象遍历方法代码汇总
Jun 16 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
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
top.location.href 没有权限 解决方法
2008/08/05 Javascript
js 无提示关闭浏览器页面的代码
2010/03/09 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
vue实现循环切换动画
2018/10/17 Javascript
Python中的choice()方法使用详解
2015/05/15 Python
python控制台中实现进度条功能
2015/11/10 Python
python实现定时发送qq消息
2019/01/18 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
Python paramiko使用方法代码汇总
2020/11/20 Python
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
金山毒霸系列的笔试题
2013/04/13 面试题
电台编导求职信
2014/05/06 职场文书
运动会横幅标语
2014/06/17 职场文书
教师教育教学随笔
2015/08/15 职场文书
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS
使用HttpSessionListener监听器实战
2022/03/17 Java/Android