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读取中文cookie时的乱码问题的解决方法
Oct 14 Javascript
javascript setinterval 的正确语法如何书写
Jun 17 Javascript
jquery中attr和prop的区别分析
Mar 16 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
Apr 12 Javascript
深入理解js promise chain
May 05 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
Jul 18 Javascript
Node.js检测端口(port)是否被占用的简单示例
Sep 29 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
Jan 23 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
Nov 21 Javascript
JS执行控制之节流模式实例分析
Dec 21 Javascript
详解利用eventemitter2实现Vue组件通信
Nov 04 Javascript
解决新建一个vue项目过程中遇到的问题
Oct 22 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实现异步调用方法研究与分享
2011/10/27 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
基于php下载文件的详解
2013/06/02 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
php二维数组用键名分组相加实例函数
2013/11/06 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
javascript中AJAX用法实例分析
2015/01/30 Javascript
jQuery中animate用法实例分析
2015/03/09 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
vue实现文件上传功能
2018/08/13 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
2020/02/06 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
python操作MySQL数据库的方法分享
2012/05/29 Python
使用Python编写一个在Linux下实现截图分享的脚本的教程
2015/04/24 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
Python简易版停车管理系统
2019/08/12 Python
python生成任意频率正弦波方式
2020/02/25 Python
python相对企业语言优势在哪
2020/06/12 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
中间件的定义
2016/08/09 面试题
十八大标语口号
2014/10/09 职场文书
学校法制宣传日活动总结
2014/11/01 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
学前班教学反思
2016/02/24 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书
vue选项卡切换的实现案例
2022/04/11 Vue.js
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python