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 相关文章推荐
FCK调用方法..
Dec 21 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
Mar 17 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
Mar 28 Javascript
jquery序列化表单以及回调函数的使用示例
Jul 02 Javascript
javascript ajax的5种状态介绍
Aug 18 Javascript
Vue.js双向绑定实现原理详解
Dec 22 Javascript
深入理解JavaScript继承的多种方式和优缺点
May 12 Javascript
jQuery自动或手动图片切换效果
Oct 11 jQuery
分享vue里swiper的一些坑
Aug 30 Javascript
vue-cli3.X快速创建项目的方法步骤
Nov 14 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
cypress测试本地web应用
Jun 01 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程序占用多少内存(memory_get_usage)
2012/09/23 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
Laravel实现表单提交
2017/05/07 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
JavaScript 原型学习总结
2010/10/29 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
vue ssr 指南详读
2018/06/29 Javascript
[02:00]DAC2018主宣传片——龙征四海,剑问东方
2018/03/20 DOTA
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
python 实现二维列表转置
2019/12/02 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
Python中bisect的用法及示例详解
2020/07/20 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
美国购车网站:TrueCar
2016/10/19 全球购物
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
金融专业个人求职信
2013/09/22 职场文书
工业学校毕业生自荐书
2014/01/03 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
公司年会主持词范文!
2019/05/07 职场文书
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL
Python中itertools库的四个函数介绍
2022/04/06 Python
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang