addEventListener 和 直接添加事件的区别

1 概述

addEventListener 和 直接添加事件的区别!

2 详述

首先,需要讲一下绑定事件的分类,也就是添加事件的方法,在js中,一般分两大类,直接添加和事件监听(这里的说法有待考究);

  1. test.onclick = function(){}
  2. test.addEventListener(“click”, function(){})

因为在 js 中不支持事件重载(也就是同时绑定两个一模一样的事件),所以如以下例子:

test.onclick = function() {
    console.log("第一个点击事件!不会触发")
}
test.onclick = function() {
    console.log("第二个点击事件!会触发")
}
// 打印结果
// 第二个点击事件!会触发

而当使用 addEventListener 时,两个事件都会被触发,如下:

test.addEventListener("click", function(){
   console.log("第一个addEventListener!会触发")
})
test.addEventListener("click", function(){
    console.log("第二个addEventListener!也会触发")
})
// 打印结果
// 第一个addEventListener!会触发
// 第二个addEventListener!也会触发

不仅如此,addEventListener拥有第三个参数, capture, 事件触发的时间,默认false为冒泡阶段,可以改为true,改成在捕获阶段执行!
详解看博主的另一篇博文!

在JavaScript,为动态创建的元素添加事件监听器时,需要特别注意事件绑定的时机。通常,如果我们直接在元素创建之后使用`addEventListener`方法,可能会发现事件并没有按预期工作,因为此时可能还没有完成元素的添加到DOM。为了解决这个问题,我们可以使用事件委托的方式或者确保在DOM元素已经渲染后再进行事件绑定。 使用事件委托的方式,我们可以将事件监听器添加到一个已经存在于DOM的父元素上,并且利用事件冒泡的特性来处理目标元素上的事件。示例如下: ```javascript // 假设有一个已存在的父元素容器 var container = document.getElementById('container'); // 动态创建一个按钮并添加到容器 var button = document.createElement('button'); button.textContent = '点击我'; container.appendChild(button); // 通过事件委托的方式为动态创建的按钮添加点击事件监听器 container.addEventListener('click', function(event) { // 检查事件目标是否是我们想要的按钮 if (event.target === button) { alert('按钮被点击了!'); } }); ``` 在这个例子,我们没有直接在动态创建的按钮上添加事件监听器,而是将监听器添加到了按钮的父容器上。这样,当按钮上的事件发生时,事件会冒泡到父容器,并由父容器上的监听器处理。 另一种方法是在将元素添加到DOM后立即添加事件监听器: ```javascript // 动态创建一个按钮 var button = document.createElement('button'); button.textContent = '点击我'; // 将按钮添加到容器 var container = document.getElementById('container'); container.appendChild(button); // 确保按钮已经添加到DOM后,为其添加事件监听器 button.addEventListener('click', function() { alert('按钮被点击了!'); }); ``` 这种方法要求我们确保在添加事件监听器时元素已经被渲染到DOM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangpaopao0609

看星空看日落不如看我的眼眸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值