js中onclick 与 addEventListener的区别
文章类型:Javascript
发布者:hp
发布时间:2024-11-25
onclick和addEventListener都可用于给元素绑定事件,实现相对于的功能,那么他们两者的区别是什么呢?
(一)addEventListener
1:是 JavaScript 中的一个方法,允许开发人员动态地将事件处理程序附加到 HTML 元素
(二)onclick
1:是一个用于在用户点击特定元素(如按钮或链接)时执行 JavaScript 代码的 HTML 属性,直接在HTML标记定义内联事件处理
1:addEventListener
<!DOCTYPE html>
<html>
<head>
<title>onclick Example</title>
</head>
<body>
<button id="myButton">Click me</button>
<script>
function handleClick() {
alert("Button clicked!");
}
document.getElementById("myButton").onclick = handleClick;
</script>
</body>
</html>
2:onclick
<!DOCTYPE html>
<html>
<head>
<title>onclick Example</title>
</head>
<body>
<button id="myButton">Click me</button>
<script>
function handleClick() {
alert("Button clicked!");
}
document.getElementById("myButton").onclick = handleClick;
</script>
</body>
</html>
(一)语法上
1:addEventListener是一个方法,可以将多个事件处理程序添加到同一元素幕布灰覆盖现在处理程序
2:onclick只是HTML一个属性,可以直接嵌入到HTML元素中,只能有一个处理程序
(二)事件管理上
1:addEventListener适合添加多个事件监听器,并且能够在事件不同阶段进行处理,更加灵活
2:onclick只能为每个元素添加一个事件处理程序,不支持多个
(三)代码和科维护性上
1:addEventListener允许从HTML中分离,可以在外部脚本中定义事件程序
2:onclick和HTML代码混合在一起,可维护性差
(四)兼容性上
1:addEventListener符合现代事件处理标准
2:onclick是一个早期事件处理方式,某些情况有兼容性问题
1.onclick事件在同一时间只能指向唯一对象
2.addEventListener给一个事件注册多个listener
3.addEventListener对任何DOM都是有效的,而onclick仅限于HTML
4.addEventListener可以控制listener的触发阶段,(捕获/冒泡)。对于多个相同的事件处理器,不会重复触发,不需要手动使用removeEventListener清除
(一)addEventListener的第三个参数
1:参数
type=>事件类型
listener =>事件的回调函数
useCapture=>可选参数对象
2:定义:addEventListener方法的第三个参数是一个布尔值,用于指定事件是在捕获阶段还是冒泡阶段触发。
修订前=>布尔值
修订后=>{},对象
3:代码
el.addEventListener(type, listener[, useCapture])
el.addEventListener(type, listener, {
capture: false, // === useCapture
once: false, // 是否设置单次监听,if true,会在调用后自动销毁listener
passive: false // 是否让 阻止默认行为(preventDefault()) 失效,if true, 意味着listener永远不远调用preventDefault方法
})
// 新增参数的三个属性,默认值都是 false。
4:总结
当它为布尔值时,表示 useCapture,useCapture 默认为 false,表示在事件冒泡阶段触发回调函数,为 true 表示在事件捕获阶段触发回调函数
当它为一个 options 对象时:capture 与 useCapture,作用相同,默认 false,once 表示该事件是否只触发一次,默认 false,passive 表示是否可调用 preventDefault()(阻止默认事件),默认 false
true 的触发顺序总是在 false 之前,如果多个均为 true,则外层的触发先于内层,如果多个均为 false,则内层的触发先于外层。
5:作用
决定事件在哪个阶段被触发。 false时:冒泡阶段触发 true: 捕获阶段触发。默认值是 false,即冒泡触发