js 中 addEventListener 方法作用 js 中 addEventListener 方法的使用场景

使用 addEventlistener 而不是直接在 html 中绑定事件,是因为它能解耦 JavaScript 代码与 html 结构,支持为同一元素添加多个同类型事件监听器而不覆盖,提升代码的可维护性和灵活性;1. 直接在 html 中使用 onclick 等属性会导致结构与行为耦合,不利于复用和管理;2. addeventlistener 允许绑定多个事件处理函数,执行时按添加顺序依次触发;3. 常见使用场景包括表单提交处理、鼠标与键盘事件响应、页面加载初始化及事件委托优化性能;4. 移除事件监听器需使用 removeeventlistener,并传入相同的事件类型、函数引用和 usecapture 参数,因此通常需将监听函数定义为变量以便移除;5. 第三个参数 usecapture 为布尔值,默认 false 表示事件在冒泡阶段执行,设为 true 则在捕获阶段执行,控制事件触发顺序,适用于需要提前拦截或阻止事件传播的场景。

js 中 addEventListener 方法作用 js 中 addEventListener 方法的使用场景

addEventListener 方法允许你向 HTML 元素添加事件监听器,从而在特定事件发生时执行指定的函数。它比直接在 HTML 标签中使用 onclick 等属性更加灵活和强大。

js 中 addEventListener 方法作用 js 中 addEventListener 方法的使用场景

addEventListener 方法的主要作用是解耦事件处理逻辑和 HTML 结构,使得代码更易于维护和扩展。你可以为一个元素添加多个事件监听器,而不会覆盖之前的监听器。

为什么使用 addEventListener 而不是直接在 HTML 中绑定事件?

直接在 HTML 标签中绑定事件,例如 ,虽然简单,但存在一些问题。首先,它将 HTML 结构和 JavaScript 代码紧密耦合在一起,不利于代码的维护和复用。其次,一个元素只能绑定一个同类型的事件处理函数,如果需要绑定多个,后面的会覆盖前面的。

js 中 addEventListener 方法作用 js 中 addEventListener 方法的使用场景

addEventListener 方法解决了这些问题。它可以为一个元素添加多个相同类型的事件监听器,并且可以将事件处理逻辑与 HTML 结构分离,提高代码的可读性和可维护性。例如:

const button = document.getElementById('myButton');  button.addEventListener('click', function() {   console.log('Button clicked (first listener)'); });  button.addEventListener('click', function() {   console.log('Button clicked (second listener)'); });

在这个例子中,当点击按钮时,两个事件监听器都会被执行,分别输出不同的信息。

js 中 addEventListener 方法作用 js 中 addEventListener 方法的使用场景

addEventListener 的常见使用场景有哪些?

addEventListener 的使用场景非常广泛,几乎所有需要响应用户交互或特定事件的场景都可以使用它。一些常见的例子包括:

  • 处理表单提交 监听表单的 submit 事件,在提交前进行数据验证或进行异步提交。
const form = document.getElementById('myForm');  form.addEventListener('submit', function(event) {   event.preventDefault(); // 阻止默认的表单提交行为   console.log('Form submitted');   // 在这里进行数据验证或异步提交 });
  • 响应鼠标事件 监听元素的 click、mouseover、mouseout 等鼠标事件,实现各种交互效果。
const element = document.getElementById('myElement');  element.addEventListener('mouseover', function() {   element.style.backgroundColor = 'red'; });  element.addEventListener('mouseout', function() {   element.style.backgroundColor = 'white'; });
  • 监听键盘事件 监听 keydown、keyup、keypress 等键盘事件,实现键盘快捷键或输入控制。
document.addEventListener('keydown', function(event) {   if (event.key === 'Enter') {     console.log('Enter key pressed');   } });
  • 处理页面加载和卸载事件: 监听 domContentLoaded、load、beforeunload 等事件,在页面加载完成或卸载前执行一些操作。
document.addEventListener('DOMContentLoaded', function() {   console.log('DOM loaded');   // 在这里进行初始化操作 });
  • 使用事件委托优化性能: 将事件监听器绑定到父元素上,利用事件冒泡机制处理子元素的事件,减少事件监听器的数量,提高性能。例如,监听 ul 元素的点击事件,然后根据点击的 li 元素的不同,执行不同的操作。这样就避免了为每个 li 元素都绑定一个点击事件监听器。
const list = document.getElementById('myList');  list.addEventListener('click', function(event) {   if (event.target.tagName === 'LI') {     console.log('List item clicked:', event.target.textContent);     // 根据点击的 list item 执行不同的操作   } });

如何移除通过 addEventListener 添加的事件监听器?

可以使用 removeEventListener 方法来移除之前添加的事件监听器。需要注意的是,removeEventListener 方法需要传入与 addEventListener 方法相同的事件类型、监听函数和 useCapture 参数。因此,通常需要将监听函数保存到一个变量中,以便在移除时使用。

const button = document.getElementById('myButton');  function handleClick() {   console.log('Button clicked');   button.removeEventListener('click', handleClick); // 移除事件监听器 }  button.addEventListener('click', handleClick);

在这个例子中,当点击按钮时,会输出 “Button clicked”,然后移除该事件监听器。再次点击按钮时,不会再有任何输出。

addEventListener 的第三个参数 useCapture 有什么作用?

addEventListener 方法的第三个参数 useCapture 是一个布尔值,用于指定事件监听器是在捕获阶段还是冒泡阶段执行。默认值为 false,表示在冒泡阶段执行。

  • 捕获阶段: 事件从根元素开始,沿着 DOM 树向下传播,直到到达目标元素。
  • 冒泡阶段: 事件从目标元素开始,沿着 DOM 树向上传播,直到到达根元素。

如果 useCapture 设置为 true,则事件监听器会在捕获阶段执行,这意味着它会比在冒泡阶段执行的事件监听器更早地接收到事件。通常情况下,我们不需要使用捕获阶段,除非需要对事件进行一些特殊的处理,例如阻止事件继续传播。

const parent = document.getElementById('parent'); const child = document.getElementById('child');  parent.addEventListener('click', function() {   console.log('Parent clicked (bubbling)'); });  child.addEventListener('click', function(event) {   console.log('Child clicked (bubbling)');   //event.stopPropagation(); // 阻止事件冒泡 });  parent.addEventListener('click', function() {   console.log('Parent clicked (capturing)'); }, true);  child.addEventListener('click', function() {   console.log('Child clicked (capturing)'); }, true);

在这个例子中,如果没有 event.stopPropagation(),点击 child 元素,输出顺序是:Child clicked (capturing),Parent clicked (capturing),Child clicked (bubbling),Parent clicked (bubbling)。如果 child 的 bubbling 阶段增加了 event.stopPropagation(),则只会输出:Child clicked (capturing),Parent clicked (capturing),Child clicked (bubbling)。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享