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中的私有成员
Sep 18 Javascript
JS防止用户多次提交的简单代码
Aug 01 Javascript
高效的获取当前元素是父元素的第几个子元素
Oct 15 Javascript
js分页工具实例
Jan 28 Javascript
JavaScript基于setTimeout实现计数的方法
May 08 Javascript
js预加载图片方法汇总
Jun 15 Javascript
jquery带翻页动画的电子杂志代码分享
Aug 21 Javascript
JQuery为元素添加样式的实现方法
Jul 20 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
Jan 04 Javascript
Vue 幸运大转盘实现思路详解
May 06 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
Sep 26 Javascript
浅谈TypeScript 索引签名的理解
Oct 16 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
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
php学习之 循环结构实现代码
2011/06/09 PHP
php多文件上传功能实现原理及代码
2013/04/18 PHP
php保存任意网络图片到服务器的方法
2015/04/14 PHP
Javascript 面向对象特性
2009/12/28 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
vue 更改连接后台的api示例
2019/11/11 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
2018/10/09 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
UNIX文件类型
2013/08/29 面试题
乔丹名人堂演讲稿
2014/05/24 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
社区节水倡议书
2015/04/29 职场文书
工作后的感想
2015/08/07 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书
Android中的Launch Mode详情
2022/06/05 Java/Android