当前位置: 首页 > news >正文

JavaScript原生+jQuery 事件委托

JavaScript 事件委托

JavaScript事件委托是一种优化事件处理的技术,通过将事件处理程序绑定到父元素而不是每个子元素上来提高性能。当事件发生时,事件会逐级冒泡到父元素,然后由父元素触发事件处理程序。

使用事件委托的好处是可以减少内存消耗和事件处理程序数量,尤其在有大量子元素需要绑定事件的情况下。此外,事件委托还可以动态处理新增或删除的子元素,而无需重新绑定事件。

以下是一个使用事件委托的示例:

HTML代码:

<ul id="myList"><li>Item 1</li><li>Item 2</li><li>Item 3</li>
</ul>

JavaScript代码:

// 获取父元素
var list = document.getElementById("myList");// 创建事件处理程序
function handleClick(event) {// 在控制台输出点击的子元素文本内容console.log(event.target.innerText);
}// 绑定事件处理程序到父元素
list.addEventListener("click", handleClick);

在上述示例中,我们首先获取了父元素&lt;ul>,然后创建了一个事件处理程序handleClick。在事件委托的模式中,事件处理程序会被绑定到父元素&lt;ul>上,而不是每个子元素&lt;li>上。当点击子元素时,事件会冒泡到父元素,并触发事件处理程序。然后,事件处理程序可以通过event.target来获取点击的子元素,并执行相应的操作。

使用事件委托可以简化代码并提高性能,特别是在处理大量子元素的情况下。

jQuery 事件委托

jQuery 也提供了事件委托的机制,使得事件处理更加简便和高效。通过使用 .on() 方法,你可以将事件处理程序绑定到父元素上,并通过选择器来指定需要处理的子元素。

下面是一个使用 jQuery 的事件委托的例子:

HTML 代码:

<ul id="myList"><li>Item 1</li><li>Item 2</li><li>Item 3</li>
</ul>

JavaScript 代码:

// 获取父元素
var list = $("#myList");// 创建事件处理程序
function handleClick(event) {// 在控制台输出点击的子元素文本内容console.log($(event.target).text());
}// 绑定事件处理程序到父元素
list.on("click", "li", handleClick);

在上述示例中,我们首先使用 $ 函数获取了父元素 list。然后,我们创建了一个事件处理程序 handleClick,它使用 $(event.target) 来获取点击的子元素,并调用 .text() 方法来获取文本内容。

接下来,在使用 .on() 方法时,我们传递两个参数。第一个参数是事件类型,这里是 "click",表示我们希望处理点击事件。第二个参数是选择器,这里是 "li",表示我们希望处理所有的 &lt;li> 子元素的点击事件。通过将事件处理程序绑定到父元素上,jQuery 会自动处理冒泡事件,并在符合选择器条件的子元素上触发事件处理程序。

使用 jQuery 的事件委托可以简化代码,并且在处理大量子元素或动态添加/删除子元素时非常方便。

原生js事件委托的代码实例

HTML 代码:

<ul id="myList"><li>Item 1</li><li>Item 2</li><li>Item 3</li>
</ul>

JavaScript 代码:

// 获取父元素
var list = document.getElementById("myList");// 创建事件处理程序
function handleClick(event) {// 检查点击的元素是否是 <li> 元素if (event.target.tagName === "LI") {// 在控制台输出点击的子元素文本内容console.log(event.target.innerText);}
}// 绑定事件处理程序到父元素
list.addEventListener("click", handleClick);

在上述示例中,我们首先使用 getElementById() 方法获取了父元素 list。然后,我们创建了一个事件处理程序 handleClick

在事件处理程序中,我们使用 event.target 来获取触发事件的元素,并通过 tagName 属性检查它是否是 &lt;li> 元素。只有当点击的元素是 &lt;li> 元素时,我们才在控制台输出子元素的文本内容。

最后,我们使用 addEventListener() 方法将事件处理程序绑定到父元素上,并指定事件类型为 "click"

这样,当我们点击列表中的任何一个 &lt;li> 元素时,都会触发父元素的点击事件,然后通过事件委托机制,只有符合选择器条件的子元素才会触发事件处理程序。

相关文章:

  • 阿里云语音合成TTS直播助手软件开发
  • 【Qt秘籍】[008]-Qt中的connect函数
  • 【LeetCode:575. 分糖果+ 哈希表】
  • LNMP网站架构部署
  • SDL教程(二)——Qt+SDL播放器
  • 深度学习优化算法比较
  • Tailwindcss Flex 布局相关的样式类及其实战案例
  • Vue3 双向绑定
  • 【Qt】【模型视图架构】代理模型
  • 文件上传之使用一个属性接收多个文件
  • Python课设-学生信息管理系统
  • 申请高德地图API的Key并加以接口调用的方法
  • 深入分析 Android Service (完)
  • WordPress plugin MStore API SQL注入漏洞复现(CVE-2023-3077)
  • axios七大特性
  • 深入了解以太坊
  • 【附node操作实例】redis简明入门系列—字符串类型
  • CSS 提示工具(Tooltip)
  • HTTP那些事
  • IOS评论框不贴底(ios12新bug)
  • php的插入排序,通过双层for循环
  • React-Native - 收藏集 - 掘金
  • Solarized Scheme
  • vue中实现单选
  • Zepto.js源码学习之二
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 什么软件可以剪辑音乐?
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 源码安装memcached和php memcache扩展
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #includecmath
  • #NOIP 2014# day.2 T2 寻找道路
  • (003)SlickEdit Unity的补全
  • (23)Linux的软硬连接
  • (27)4.8 习题课
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (三)SvelteKit教程:layout 文件
  • (新)网络工程师考点串讲与真题详解
  • (转载)Google Chrome调试JS
  • .apk 成为历史!
  • .htaccess 强制https 单独排除某个目录
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET Framework .NET Core与 .NET 的区别
  • .net SqlSugarHelper
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded