0级DOM事件模型和2级DOM事件模型

前言:今天看到有关JavaScript中的事件模型,决定深入的了解下,下面的内容全部围绕标题展开。


一. 疑惑

如果是第一次看到事件模型这块,一定会有个疑虑,为什么是0级和2级,1级在哪里?其实,实际上并没有0级DOM这个标准,它是大家对最原始的DOM模型的叫法,里面有最原始的事件模型,在1级DOM标准中并没有规定事件模型,2级DOM里面规定了事件模型。

二. 0级DOM事件模型

(1)方式一

<button id="btn" onclick="showmess()">点我</button>

<script>
    function showmess(){
        alert("我是button");
    }
</script>

(2)方式二

<button id="btn">点我</button>
<script>
    document.getElementById("btn").onclick = function(){
        alert("我是button");
    }
</script>

可以看出0级DOM事件模型,的事件注册有两种方法,第一种是直接利用HTML的属性来直接注册;第二种是用JS函数获得元素对象,再注册。

三. 2级DOM事件模型

2级DOM事件模型,是标准的事件模型,注册方式如下:

<button id="btn">点我</button>
<script>
var target = document.getElementById("btn");
target.addEventListener('click',function(){
        alert("我是button");
}, true);

</script>

在2级DOM事件模型中,使用addEventListener函数为元素注册事件,该函数有三个参数,第一个是事件的类型,第二个是处理函数,第三个参数为boolean值,为true表示事件监听处理在捕捉阶段,为false表示事件监听处理在目标阶段和冒泡阶段。与之对应的还有个removeEventListener()方法,该方法是移除事件监听,参数与addEventListener()相同。

三. 两者的区别
(1)由上面的内容可以看出两者的事件注册方式不同;

(2)在0级DOM事件模型中,函数是元素的事件句柄,所以this应用的就是发生事件的元素;在2级DOM中,由于事件被分为三个执行阶段,所以this并没有明确的指向,应使用event对象的currentTarget属性,它指向的是注册该事件的元素;

(3)0级DOM事件模型只对事件的类型进行分类,例如:鼠标事件和键盘事件;2级DOM事件模型是模块化的,分为HTMLEvents,MouseEvents,和UIEvents三个模块,分别实现不同的接口;

(4)最主要的区别,在0级DOM中事件模型中,浏览器把事件分发给元素,如果有合适的事件就触发;在2级DOM事件模型中,事件被分为三个阶段,捕获阶段->目标阶段->冒泡阶段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值