js学习总结之dom2级事件基础知识详解


Posted in Javascript onJuly 27, 2017

我们使用的DOM2事件绑定,其实是让box通过原型链一直找到EventTarget这个内置类原型上的addEventListener方法实现的。

DOM0级事件绑定:只能给一个元素的某一个行为绑定一次方法,第二次绑定的会把前面的覆盖掉。

DOM2:可以给某一个元素的同一个行为绑定多个不同的方法

box.addEventListener('click',function(e){
      console.log(1)
    },false)
    box.addEventListener('click',function(e){
      console.log(2)
    },false) // 输出1 2

DOM2:DOM0中的行为类型,我们用DOM2一样可以绑定,而且DOM2中还提供了一些DOM0没有的行为类型->DOMContentLoaded:当页面中的DOM结构(HTML结构加载完成)触发的行为

box.addEventListener('DOMContentLoaded',function(e){
      
    },false)
window.onload = function(){}

//当页面中的所有资源都加载完成(图片、HTML结构、音视频...)才会执行后面的函数;并且在一个页面中只能用一次,后面在写会把前面的覆盖掉;->因为他是采用DOM0事件绑定,所以只能绑定一次
     $(document).ready(function(){})//->$(function(){})
    /*
      只要页面中的HTML结构加载完成就会执行对应的函数;并且在同一个页面中可以出现多次。因此这个是采用DOM2事件的绑定,绑定的行为是DOMContentLoaded
    */

DOM2级添加和移除事件细节

function fn1(e){
      console.log(this);
    }
    //添加事件
    box.addEventListener('click',fn1,false);
    //移除事件
    box.removeEventListener('click',fn1,false);

注意:移除的时候需要保证三个参数:行为、方法、哪个阶段发生的   三个参数必须一致 ->DOM2在绑定的时候,我们一般都给他绑定的是实名函数

只能给某个元素的同一个行为绑定多个“不同”的方法(如果方法相同了,只能留一个)

当行为触发,会按照绑定的先后顺序依次把绑定的方法执行;执行的this是当前被绑定事件的元素本身

function fn1(){
      console.log(1);
    }
    //添加事件
    box.addEventListener('click',fn1,false);
    box.addEventListener('click',fn1,false);//只输出一个1

上面涉及一个概念:事件池(用来存储当前元素行为绑定的方法的,浏览器自带的机制) 如下图所示

js学习总结之dom2级事件基础知识详解

 但是在IE6-8浏览器中,不支持addEventListener,如果想实现DOM2事件绑定只能用attachEvent/detachEvent

它只有两个参数,不能像addEventListener那样控制在哪个阶段发生,默认只能在冒泡阶段发生,同时行为需要添加on(和DOM0特别的类似)

box.attachEvent('onclick',fn1)

注意:和标准浏览器的事件池机制对比:

1、顺序问题:执行的时候顺序是混乱的,标准浏览器是按照绑定顺序依次执行的

2、重复问题:ie6-8可以给同一个元素的同一个行为绑定多个相同的方法

3、this问题:ie6-8中当方法执行的时候,方法中的this不是当前的元素box而是window

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript算法学习(直接插入排序)
Apr 12 Javascript
jQuery实现下拉框左右选择的简单实例
Feb 22 Javascript
jQuery 操作input中radio的技巧
Jul 18 Javascript
jQuery动态修改字体大小的方法【测试可用】
Sep 09 Javascript
纯JS焦点图特效实例(可一个页面多用)
Dec 07 Javascript
JS正则表达式之非捕获分组用法实例分析
Dec 28 Javascript
几种tab切换详解
Feb 03 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
Mar 13 Javascript
简单说说如何使用vue-router插件的方法
Apr 08 Javascript
layui 实现自动选择radio单选框(checked)的方法
Sep 03 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
Sep 20 Javascript
详细分析Node.js 模块系统
Jun 28 Javascript
Angular指令之restict匹配模式的详解
Jul 27 #Javascript
Angularjs的$http异步删除数据详解及实例
Jul 27 #Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 #Javascript
Angularjs的键盘事件的绑定
Jul 27 #Javascript
Angularjs 事件指令详细整理
Jul 27 #Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
Jul 27 #Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
Jul 27 #Javascript
You might like
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
php分页函数示例代码分享
2014/02/24 PHP
php实现socket推送技术的示例
2017/12/20 PHP
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
跟老齐学Python之集合的关系
2014/09/24 Python
python基于socket实现网络广播的方法
2015/04/29 Python
python、java等哪一门编程语言适合人工智能?
2017/11/13 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
学python安装的软件总结
2019/10/12 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
jupyter实现重新加载模块
2020/04/16 Python
python创建文本文件的简单方法
2020/08/30 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
CAT鞋加拿大官网:CAT Footwear加拿大
2020/08/05 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
静态成员和非静态成员的区别
2012/05/12 面试题
小学生家长寄语
2014/04/02 职场文书
酒店节能减排方案
2014/05/26 职场文书
金融专业求职信
2014/08/05 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
教师创先争优承诺书
2015/04/27 职场文书
公司转让协议书
2016/03/19 职场文书