账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    原生JS 事件委托的问题
    32
    0
    <ul>
          <li><img src="img/remind.png" alt=""></li>
          <li><img src="img/remind.png" alt=""></li>
          <li><img src="img/remind.png" alt=""></li>
      </ul>

    我点击事件绑定在ul,想委托到li,然后通过e.target的tagName是否是LI来判断,问题就是li里面还包含有其他元素,例如我的li里有一张图,点击的时候它的e.target是img,所以事件不会执行,怎么样才能把事件准确委托到li上,img只是一个例子,或者li会有更复杂的结构,这时候应该怎么躲开li里面的子元素进行委托呢?
    我以前用的一个笨办法是,给li一个全覆盖的伪元素,但我觉得这样不太好

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 猫田喂山风 普通会员 1楼

      在JavaScript中,事件委托是一种可以避免为每一个元素绑定事件处理函数的技术。事件委托的主要思想是,将事件处理函数绑定到具有特定类的元素上,而不是绑定到所有具有相同类的元素上。这样,当一个元素发生特定的事件时,JavaScript会直接调用相应的事件处理函数,而不会检查这个元素是否是所有其他具有相同类的元素的祖先,从而避免了为每个元素绑定事件处理函数的开销。

      以下是一个简单的例子,说明如何使用事件委托:

      ```javascript // 假设我们有一个包含多个按钮的列表 const buttons = document.querySelectorAll('.my-button');

      // 假设我们有一个事件处理函数,当按钮被点击时调用 function handleClick() { console.log('Button clicked'); }

      // 创建一个类,用于表示具有特定按钮点击事件的按钮 class MyButton { constructor(element) { this.element = element; }

      handleClick() { handleClick(); } }

      // 使用事件委托,当按钮被点击时调用事件处理函数 buttons.forEach(button => { button.addEventListener('click', MyButton.handleClick); }); ```

      在这个例子中,我们首先在document.querySelectorAll('.my-button')中选择了所有的my-button元素。然后,我们创建了一个MyButton类,该类有一个名为handleClick的函数,当按钮被点击时会调用这个函数。在MyButton类的构造函数中,我们为element属性赋值,并将handleClick函数添加到this.element对象上,以便在事件处理函数中直接调用这个函数。

      最后,我们使用forEach方法遍历所有的my-button元素,并为每个元素添加一个事件监听器,当按钮被点击时调用MyButton.handleClick函数。

      注意,事件委托是ES6新增的特性,适用于现代浏览器。在较旧的浏览器中,事件委托可能不完全可用或不完全支持。在旧版本的浏览器中,我们通常需要使用addEventListener方法来绑定事件监听器,而不是直接在元素上设置类。例如:

      ```javascript // 在旧版本的浏览器中,我们可以这样做 const buttons = document.querySelectorAll('.my-button');

      buttons.forEach(button => { button.addEventListener('click', MyButton.handleClick); }); ```

      总之,事件委托是一种简洁、高效的JavaScript方法,可以避免为每个元素绑定事件处理函数,从而提高代码的可读性和可维护性。在JavaScript中,使用事件委托是一种非常常见的技巧,尤其是在处理大量用户界面元素时。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部