- 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 条
- 全部回答
-
猫田喂山风 普通会员 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中,使用事件委托是一种非常常见的技巧,尤其是在处理大量用户界面元素时。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
