浅谈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的数组的扩展实例代码
Jul 09 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
Dec 05 Javascript
Javascript实现字数统计
Jul 03 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
Dec 26 Javascript
详解js前端代码异常监控
Jan 11 Javascript
AngularJS 中的数据源的循环输出
Oct 12 Javascript
webpack源码之loader机制详解
Apr 06 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
Apr 17 jQuery
浅谈webpack-dev-server的配置和使用
May 17 Javascript
Vue Cli3 创建项目的方法步骤
Oct 15 Javascript
微信小程序API—获取定位的详解
Apr 30 Javascript
layer父页获取弹出层输入框里面的值方法
Sep 02 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
WordPress分页伪静态加html后缀
2016/06/08 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
2019/12/04 PHP
浅析javascript闭包 实例分析
2010/12/25 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
对javascript继承的理解
2016/10/11 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
[02:16]DOTA2英雄基础教程 干扰者
2014/01/15 DOTA
python中的一些类型转换函数小结
2013/02/10 Python
python文件和目录操作方法大全(含实例)
2014/03/12 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
毕业生文员求职信
2013/11/03 职场文书
大学生职业生涯规划范文
2014/01/22 职场文书
俄罗斯商务邀请函
2014/01/26 职场文书
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python
一条 SQL 语句执行过程
2022/03/17 MySQL
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS