资讯专栏INFORMATION COLUMN

#javascript# DOM2

BLUE / 2415人阅读

摘要:当元素的某一个行为被触发,浏览器会把当前存放在事件池中的所有方法,依次按照存放的先后顺序执行。浏览器会把一些常用的事件挂载到元素对象的私有属性上。

DOM2事件绑定的原理
1.DOM2事件绑定使用的addEventListener/attachEvent都是在EventTarget这个内置类的原型上定义的,我们使用的时候,会通过原型链找个这个方法,然后执行绑定的事件。
2.浏览器会给当前元素的某一个事件行为开辟一个事件池(事件队列),准确来说,浏览器有一个统一的事件池,我们给每个元素绑定的某个方法都会放在这个事件池中,然后通过相关的标识来进行区分。当我们通过addEventListener/attachEvent做事件监听的时候,会把绑定的方法存放在事件池中。
3.当元素的某一个行为被触发,浏览器会把当前存放在事件池中的所有方法,依次按照存放的先后顺序执行。

DOM2特点

所有DOM0支持的事件行为DOM2都可以使用,而且DOM2还支持一些DOM0没有的事件行为:DOMContentLoaded

//DOM0下没有这个属性:
document.body.DOMContentLoaded === undefined

//DOM2标准浏览器下:
document.body.addEventListener("DOMContentLoaded",function(){
    //标准浏览器中兼容这个事件,当浏览器中的DOM结构加载完成,就会触发这个事件(也会把绑定的方法执行)
},false)

//DOM2下IE6~8下也不支持这个事件
document.body.attachEvent("onDOMContentLoaded",function(){
})

2.DOM2中可以给当前元素的某一个事件行为绑定多个不同的方法(因为绑定的所有方法都存放在事件池中)

function fn1(){
console.log("1");
}

function fn2(){
console.log("2");
}

function fn3(){
console.log("3");
}

document.body.addEventListener("click", fn1, false);
document.body.addEventListener("click", fn3, false);
document.body.addEventListener("click", fn2, false);

//fn2事件移除。移除的时候要求   事件类型、绑定的方法、传播阶段三个完全一致才可以移除掉

document.body.removeEventListener("click", fn2, false)

DOM0和DOM2执行顺序的问题

function fn(){
console.log(1);
}

document.addEventListerner("click", fn, false);
document.addEventListerner("click", fn, false);//第二次存储不到事件池中,因为事件池中已经存在fn。  到这里只会输出 1
document.onclick = fn;//会输出  1  1
document.onclick = function() {
    console.log(2);
}
document.addEventListerner("click", function(){
console.log(3);
}, false);
//输出结果 1 2 3
// 1. DOM0和DOM2绑定的方法是毫无关系的(因为他们是两套不同的处理机制),即使绑定的方法相同,也是执行2次
//2. 谁先绑定,就先执行谁。

DOM0:浏览器会把一些常用的事件挂载到元素对象的私有属性上。让我们可以实现DOM0事件绑定
DOM2:凡是浏览器给元素天生设置的事件在DOM2中都可以用

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109633.html

相关文章

  • JavaScript DOM2和DOM3——“DOM的变化”的注意要点

    摘要:和级分为许多模块,分别描述了的某个非常具体的子集。这些模块主要有核心视图事件样式遍历和范围以及。另外还有方法和方法框架的变化框架和内嵌框架分别用和表示,它们在级中都有一个新属性这个属性包含一个指针,指向表示框架内容的文档对象。 DOM2和DOM3级分为许多模块,分别描述了DOM的某个非常具体的子集。这些模块主要有核心(Core)、视图(Views)、事件(Events)、样式(Styl...

    骞讳护 评论0 收藏0
  • JavaScript 简介

    摘要:简介原文链接简称是一种轻量级,解释型的编程语言,其函数是一等公民。标准的目标是让任何一种程序设计语言能操控使用任何一种标记语言编写出的任何一份文档。核心规定了如何映射基于的文档结构,以便简化对文档的任意部分的访问和操作。 JavaScript 简介 原文链接 JavaScript ( 简称:JS ) 是一种 轻量级,解释型 的编程语言,其函数是一等公民。众所周知,它是用于网页开发的脚...

    URLOS 评论0 收藏0
  • # Javascript # DOM2兼容处理

    摘要:兼容问题,除了语法上的区别,在处理的机制上也有下列问题顺序问题,重复问题,对象问题。没有进行去重处理。在标准浏览器中在低版本中究其根本,都是低版本浏览器对于它内置事件池处理机制的不完善导致的。 DOM2兼容问题,除了语法上的区别,在处理的机制上也有下列问题:顺序问题,重复问题,this对象问题。 语法问题 [标准]curEle.addEventListener(type, fn, fa...

    fnngj 评论0 收藏0
  • 读书笔记(05) - 事件 - JavaScript高级程序设计

    摘要:而事件分为个级别级事件处理程序,级事件处理程序和级事件处理程序。级中没有规范事件的相关内容,所以没有级事件处理。 showImg(https://segmentfault.com/img/bVburYR?w=499&h=400); HTML依托于JavaScript来实现用户与WEB网页之间的动态交互,接收用户操作并做出相应的反馈,而事件在此间则充当桥梁的重要角色。 日常开发中,经常会...

    tinylcy 评论0 收藏0
  • JavaScript高级程序设计》学习笔记:JavaScript中的事件流和事件处理程序

    摘要:可以使用侦听器或处理程序来预订事件,以便事件发生时执行相应的代码。响应某个事件的函数称为事件处理程序或事件侦听器。可以删除通过级方法指定的事件处理程序。 JavaScript和HTML之间的交互是通过事件实现的。 事件:文档或浏览器窗口中发生的一些特定的交互瞬间。 可以使用侦听器(或处理程序来预订事件),以便事件发生时执行相应的代码。 1. 事件流 事件流:从页面中接收事件的顺序。 ...

    Rocko 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<