首页 > 其他分享 >addEventListener() 和 onclick 的区别

addEventListener() 和 onclick 的区别

时间:2024-04-05 19:30:35浏览次数:24  
标签:区别 signal 事件 onclick addEventListener btn click

前言:我们经常会看到有关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)混在了一起,不利于后期操作和维护,因此这种做法被认为是过时的、不好的,要尽量避免。

标签:区别,signal,事件,onclick,addEventListener,btn,click
From: https://blog.csdn.net/2301_79111443/article/details/137407138

相关文章

  • Vue2和3中的插槽区别及其简单案例
    vue中的插槽是什么,官方解释是:Vue实现了一套内容分发的API,这套API的设计灵感源自WebComponents规范草案,将<slot>元素作为承载分发内容的出口......vue2插槽和vue3插槽基本概念是一致的,也是匿名插槽、具名插槽、作用域插槽三种,只是基础语法有一些区别。下面让我们温习......
  • tsconfig.build.json 和 tsconfig.json 的区别是什么,为啥分为两个?
    tsconfig.json和tsconfig.build.json都是TypeScript编译器的配置文件,它们用于定义TypeScript项目的编译选项和规则。虽然它们的核心功能相同,但通常情况下,项目中会有多个tsconfig文件,如tsconfig.build.json,以满足不同编译场景的需求。下面是它们之间的一些关键区别:目......
  • ps -ef和ps -eo区别
    `ps-ef`和`ps-eo`都是Linux系统中用于查看进程的命令,但它们的主要区别在于输出的格式和内容。`ps-ef`命令用于显示系统中所有进程的列表,包括其他用户的进程。输出的内容包括UID(用户ID)、PID(进程ID)、PPID(父进程ID)、C(CPU占用率)、STIME(启动时间)、TTY(终端类型)、TIME(CPU时间)以及CMD(......
  • C语言中循环语句while 中判断条件出现 || 和 && 的区别
    当while循环条件中出现||(逻辑或) ||两边的条件有任意一个满足条件时,即为真(也就是非0),循环继续,只有两边都满足条件时,即为假(也就是0),跳出循环  当while循环条件中出现&&(逻辑与)&& 两边都满足条件时,即为真(也就是非0,循环继续只要有任意一边满足条件,即为假(也就是0),跳出循环......
  • &&和&的区别
    1.短路逻辑与(&&):○当用于布尔表达式时,&&运算符具有短路特性。这意味着如果第一个表达式的值为false,那么它不会去评估第二个表达式,因为无论第二个表达式的值是什么,整个表达式的最终结果都将为false。○这种短路性质对于避免不必要的计算和可能的副作用特别有用,例如......
  • 浏览器中localStroage、sessionStorage、cookie的区别与使用
    特性localStoragesessionStorageCookieSession存储位置浏览器本地浏览器本地浏览器本地服务器数据传输不自动发送不自动发送自动发送ID自动发送存储类型键值对键值对文本多种类型(任意)存储大小通常约5MB通常约5MB通常≤4KB无硬性限制生命周期持久化存储关闭窗口/标签页后清除可......
  • 构造方法和普通方法区别是啥?
    在面向对象编程中,构造方法(Constructor)和普通方法(普通方法)有几个关键区别:用途不同:构造方法用于初始化对象,当创建一个类的实例时会自动调用构造方法来初始化对象的状态。普通方法用于执行特定的操作或计算,并且可以根据需要调用多次。方法签名不同:构造方法的名称与类名......
  • 函数和方法有什么区别?
    区别:1、函数是单独存在的,是面向过程部分定义的;方法是依赖于类存在的,是面向对象中定义的。2、函数可以当做一个算法的实现;方法可以当做一个业务逻辑的实现。3、类的方法可以设定访问权限,需要通过对象或者类来调用;函数是公共的,都可以使用.php函数和方法的区别1、函数是单独存在的,......
  • 【保姆级讲解下MySQL中的drop、truncate和delete的区别】
    ......
  • golang反射与接口类型断言有什么区别?
    在Go语言中,反射(Reflection)和接口类型断言(InterfaceTypeAssertion)是两种不同的机制,它们各自有不同的用途和行为。以下是对它们的比较和区别的详细解释。反射(Reflection)反射是一种在运行时检查和操作程序内容的能力。在Go语言中,反射主要通过reflect包来实现。反射使......