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 相关文章推荐
jquery 插件 人性化的消息显示
Jan 21 Javascript
JavaScript 学习点滴记录
Apr 24 Javascript
Javascript 判断Flash是否加载完成的代码
Apr 12 Javascript
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
Apr 13 Javascript
JS常用字符串处理方法应用总结
May 22 Javascript
将HTML格式的String转化为HTMLElement的实现方法
Aug 07 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
Feb 25 Javascript
javascript原型继承工作原理和实例详解
Apr 07 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
Nov 12 Javascript
js实现前端分页页码管理
Jan 06 Javascript
ReactJS实现表单的单选多选和反选的示例
Oct 13 Javascript
详解JSON和JSONP劫持以及解决方法
Mar 08 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
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
PHP 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
php从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
JavaScript Chart 插件整理
2010/06/18 Javascript
jquery实现点击消失的代码
2014/03/03 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
javascript中this关键字详解
2016/12/12 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
python变量不能以数字打头详解
2016/07/06 Python
详细介绍Python的鸭子类型
2016/09/12 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
平安建设工作方案
2014/06/02 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
MySQL里面的子查询的基本使用
2021/08/02 MySQL
Golang ort 中的sortInts 方法
2022/04/24 Golang