addEventListener() 和 onclick 的区别

前言:我们经常会看到有关addEventListener() onclick 的区别的标题,其实跟addEventListener()同级对比的应该是on+事件名称,不过在addEventListener()第一个参数为click的时候,addEventListeneronclick则值得作比较,下面就从三个角度来说说它们的区别。

1. 用法

1.1 addEventListener( )

首先,addEventListener()是官方推荐的用于绑定事件的函数,以绑定"click"为例,它的用法如下:

const btn = document.querySelector("button");

function btnClick() {
    console.log("按钮被点击了");
}

btn.addEventListener("click", btnClick);
  • 参数一:要监听的事件
  • 参数二:执行函数,也可以为匿名函数,如下
btn.addEventListener("click", () => {
    console.log("按钮被点击了");
})

如果不想要监听了,还可以用removeEventListener移除监听器:

btn.removeEventListener("click", btnClick)

如果第二个参数是匿名函数,可以在定义事件的时候增加第三个参数:

const controller = new AbortController();

btn.addEventListener("click", () => {
    console.log("按钮被点击了");
  },
  { signal: controller.signal } // 向该处理器传递 AbortSignal
);

然后要删除的时候:

controller.abort();  // 移除任何/所有与该控制器相关的事件处理器

通过传递 { signal: controller.signal } 对象作为第三个参数,将 AbortSignal 传递给了这个事件监听器。如果在事件处理器执行期间调用了 controller.abort(),则addEventListener可以通过对 signal的判断来中止事件处理器中的操作。

1.2 onclick属性

onclick作为事件处理器属性,使用的时候写法就不太一样:

btn.onclick = btnClick;

匿名函数写法:

btn.onclick = () => {
    console.log("按钮被点击了");
}

移除事件则直接设置为null:

btn.onclick = null;

其次,onclick还可以放到html标签里面,此时称为内联事件处理器:

<button onclick="btnClick()">我是一个孤独的按钮</button>

2. 灵活性

如果我们想要给同一个元素添加多个监听事件和执行函数,用addEventListener可以这样操作:

el.addEventListener("click", fun1);
el.addEventListener("click", fun2);

onclick不能给一个元素添加多个执行函数,因为后面写的属性值总是会覆盖前面的:

el.onclick() = fun1;
el.onclick() = fun2;  // 只有最后一个生效了

3. 推荐性

  • addEventListener是官方推荐的添加事件的用法,它能够添加多个事件,且只能写在js中,易于控制和修改。

  • onclick容易造成覆盖问题,管理起来比较麻烦。

  • onclick写在html标签中是不推荐的,它使得表现层(html)和行为层(js)混在了一起,不利于后期操作和维护,因此这种做法被认为是过时的、不好的,要尽量避免。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值