浅谈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 相关文章推荐
基于jquery的文章中所有图片width大小批量设置方法
Aug 01 Javascript
JS实现单行文字不间断向上滚动的方法
Jan 29 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
Dec 11 Javascript
基于jQuery实现仿微博发布框字数提示
Jul 27 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
Aug 04 Javascript
loading动画特效小结
Jan 22 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
May 10 Javascript
使用命令行工具npm新创建一个vue项目的方法
Dec 27 Javascript
微信小程序实现文字跑马灯效果
May 26 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
Feb 22 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
Dec 16 Javascript
node.js开发辅助工具nodemon安装与配置详解
Feb 06 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” 彩蛋进行敏感信息获取
2013/08/07 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
JavaScript库 开发规则
2009/01/31 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
js简单抽奖代码
2015/01/16 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
pycharm 取消默认的右击运行unittest的方法
2018/11/29 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
浅析Django中关于session的使用
2019/12/30 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
廉洁使者实施方案
2014/03/29 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
售房协议书范本
2015/08/11 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
导游词之江南周庄
2019/12/06 职场文书
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android