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 相关文章推荐
用js小类库获取浏览器的高度和宽度信息
Jan 15 Javascript
js 火狐下取本地路径实现思路
Apr 02 Javascript
window.onload和$(function(){})的区别介绍
Oct 30 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
Nov 17 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
May 05 Javascript
ECMAScript6新增值比较函数Object.is
Jun 12 Javascript
hovertree插件实现二级树形菜单(简单实用)
Dec 28 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
Aug 18 Javascript
原生JS控制多个滚动条同步跟随滚动效果
Dec 22 Javascript
Angular2整合其他插件的方法
Jan 20 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
Mar 28 jQuery
JavaScript使用类似break机制中断forEach循环的方法
Nov 13 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中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
PHP多进程简单实例小结
2019/11/09 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
jQuery bind事件使用详解
2011/05/05 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
Python 占位符的使用方法详解
2019/07/10 Python
Pandas分组与排序的实现
2019/07/23 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
美国新娘礼品店:The Paisley Box
2020/09/08 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
小班重阳节活动方案
2014/02/08 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
护理医院见习报告
2014/11/03 职场文书
合作合同协议书范本
2015/01/27 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL
Python数组变形的几种实现方法
2022/05/30 Python