熟悉 dom0级事件模型、dom2事件模型

5 篇文章 0 订阅

熟悉 dom0级事件模型和dom2事件模型

dom0级

理解:在之前IE与Netscape的规范则被称为DOM0,dom0 级事件简单的来说就是普通的 “on+监听事件”。
有两种写法:
①第一种:在标签内部写

<input  id='btn' type="button" value="点点点" onclick="console.log('点击一次!')" >

②第二种:给想要的元素添加

document.getElementById("btn").onclick = function(){
   console.log('点击了!')
}

注: DOM0级事件绑定 会存在覆盖的问题;下边的代码会把上边的代码覆盖
如:

document.getElementById("btn").onclick = function(){
   console.log('点击第一次!')
}
document.getElementById("btn").onclick = function(){
   console.log('点击第二次!')
}

点击btn之后输出 点击第二次!

dom2级

理解:监听方法,添加和移除事件处理程序:addEventListener()和removeEventListener()。
添加事件绑定:

document.getElementById("btn").addEventListener("click", function(){
      console.log('点击了!);
});

该事件会有三个固定参数:
addEventListener(event、function、useCapture)

参数①event: 必须。字符串,指定事件名。
注意: 不要使用 “on” 前缀。 例如,使用 “click” ,而不是使用 “onclick”。
参数②function:必须。指定要事件触发时执行的函数。注: 当事件对象会作为第一个参数传入函数。 事件对象的类型取决于特定的事件。例如, “click” 事件属于 MouseEvent(鼠标事件) 对象。
参数③useCapture: 可选。布尔值,指定事件是否在捕获或冒泡阶段执行。
注: true - 事件句柄在捕获阶段执行;false- false- 默认。事件句柄在冒泡阶段执行。
注: 跟dom0事件的最大区别,就是可以给一个元素多次绑定相同类型事件。

document.getElementById("btn").addEventListener("click", function(event){
      console.log('点击第一次!');
});

document.getElementById("btn").addEventListener("click", function(event){
      console.log('点击第二次!');
});

点击btn之后输出 点击第一次!再显示 点击第二次!

拓展:

冒泡和捕获

冒泡:(默认 ,第三个参数为false ,可以省略)

<div id="block1">
  <div id="block2">
    <div id="block3">点击</div>
  </div>
</div>
document.getElementById("block1").addEventListener("click", function(){
      console.log('点击了block1!');
});
document.getElementById("block2").addEventListener("click", function(){
      console.log('点击了block2!');
});
document.getElementById("block3").addEventListener("click", function(){
      console.log('点击了block3!');
});

执行顺序:(由内向外)‘点击了block3!’—>‘点击了block2!’—>‘点击了block1!’。
捕获:( 第三个参数为true)

document.getElementById("block1").addEventListener("click", function(){
      console.log('点击了block1!');
},true);
document.getElementById("block2").addEventListener("click", function(){
      console.log('点击了block2!');
},true);
document.getElementById("block3").addEventListener("click", function(){
      console.log('点击了block3!');
},true);

执行顺序:(由外向内)‘点击了block1!’—>‘点击了block2!’—>‘点击了block3!’。

也可以另外手动阻止冒泡:阻止冒泡:event.stopPropagation() (低版本IE:event.cancelBubble() )。
总结:
①DOM0级事件绑定会存在覆盖的问题。
②一个元素多次绑定相同类型事件。
③手动阻止冒泡event.stopPropagation() (低版本IE:event.cancelBubble() )。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值