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 不间断的图片滚动并可点击
Jan 15 Javascript
JavaScript获取页面上某个元素的代码
Mar 13 Javascript
深入理解JavaScript系列(13) This? Yes,this!
Jan 18 Javascript
javascript 正则表达式相关应介绍
Nov 27 Javascript
jquery实现metro效果示例代码
Sep 06 Javascript
AngularJS入门教程之路由与多视图详解
Aug 19 Javascript
JavaScript函数绑定用法实例分析
Nov 14 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
Aug 18 Javascript
详解关于Vuex的action传入多个参数的问题
Feb 22 Javascript
vue elementui el-form rules动态验证的实例代码详解
May 23 Javascript
解决小程序无法触发SESSION问题
Feb 03 Javascript
手把手带你入门微信小程序新框架Kbone的使用
Feb 25 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 FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
2014/05/10 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
学习php设计模式 php实现策略模式(strategy)
2015/12/07 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
JSON 学习之完全手册 图文
2007/05/29 Javascript
Javascript检查图片大小不要让大图片撑破页面
2014/11/04 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
解决Layui中templet中a的onclick参数传递的问题
2019/09/20 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
ES6函数实现排它两种写法解析
2020/05/13 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
用Python进行基础的函数式编程的教程
2015/03/31 Python
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
python使用matplotlib绘制热图
2018/11/07 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
举例说明类变量和实例变量的区别
2016/06/30 面试题
企业文化宣传标语
2014/06/09 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
二年级学生期末评语
2014/12/26 职场文书
三八妇女节慰问信
2015/02/14 职场文书
2016年度农村党员干部主题教育活动总结
2016/04/06 职场文书
vue+spring boot实现校验码功能
2021/05/27 Vue.js
python单元测试之pytest的使用
2021/06/07 Python