设为首页收藏本站

安徽论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11647|回复: 0

JavaScript事件的委托(代理)的用法示例详解

[复制链接]

76

主题

0

回帖

240

积分

中级会员

Rank: 3Rank: 3

积分
240
发表于 2022-3-26 11:02:38 | 显示全部楼层 |阅读模式
网站内容均来自网络,本站只提供信息平台,如有侵权请联系删除,谢谢!
目录


简介

说明
本文用示例介绍JavaScript中的事件(Event)的委托(代理)的用法。
事件委托简介
事件委托,也叫事件代理,是JavaScript中绑定事件的一种常用技巧。就是将原本需要绑定在子元素的响应事件委托给父元素或更外层元素,让外层元素担当事件监听的职务。
事件代理的原理是DOM元素的事件冒泡。
事件委托的优点
1.节省内存,减少事件的绑定
原本需要绑定在所有子元素的事件,使用事件委托之后,只需要一个事件绑定即可。
2.可以动态绑定事件,新增的子对象事件可以被已绑定的事件处理
因为新增的子对象产生的事件,最终也会冒泡到父元素,从而能够处理

示例:事件委托

需求:一个列表,点击列表元素时弹出其内容。


写法1:事件委托

只需在外层元素绑定事件即可。
  1. <!doctype html>
  2. <html lang="en">

  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>This is title</title>
  6. </head>

  7. <body>

  8. <ul id="id-ul">
  9.     <li>我是第1个li</li>
  10.     <li>我是第2个li</li>
  11.     <li>我是第3个li</li>
  12. </ul>

  13. <script>
  14.     let ul = document.getElementById('id-ul');
  15.     ul.addEventListener("click", function (ev) {
  16.         alert(ev.target.innerText);
  17.     })
  18. </script>

  19. </body>
  20. </html>
复制代码
结果



写法2:每个子元素都绑定事件

每个子元素都绑定事件。
  1. <!doctype html>
  2. <html lang="en">

  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>This is title</title>
  6. </head>

  7. <body>

  8. <ul id="id-ul">
  9.     <li>我是第1个li</li>
  10.     <li>我是第2个li</li>
  11.     <li>我是第3个li</li>
  12. </ul>

  13. <script>
  14.     let li = document.querySelectorAll('#id-ul li');
  15.     for (let liElement of li) {
  16.         liElement.addEventListener("click", function (ev) {
  17.             alert(ev.target.innerText);
  18.         });
  19.     }
  20. </script>

  21. </body>
  22. </html>
复制代码
结果


示例:新增元素

需求:每点击“生成按钮”,就生成一个子的列表元素。然后,每点击一次列表元素,会弹出其内容。
写法1:事件委托
  1. <!doctype html>
  2. <html lang="en">

  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>This is title</title>
  6. </head>

  7. <body>

  8. <ul id="id-ul">
  9.     <li>1</li>
  10.     <li>2</li>
  11. </ul>
  12. <button id="btn">click</button>
  13. <script>
  14.     let num = 3;
  15.     let eUl = document.querySelector("#id-ul");
  16.     let eButton = document.querySelector("#btn");

  17.     eButton.addEventListener("click", function () {
  18.         let newLi = document.createElement("li");
  19.         eUl.appendChild(newLi);
  20.         newLi.innerText = num++;
  21.     })
  22.     eUl.addEventListener("click",function (event) {
  23.         alert(event.target.innerText);
  24.     })
  25. </script>

  26. </body>
  27. </html>
复制代码
结果

可以看到,原有的元素和新建的元素的事件都会被处理。
写法2:每个子元素都绑定事件
  1. <!doctype html>
  2. <html lang="en">

  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>This is title</title>
  6. </head>

  7. <body>

  8. <ul id="id-ul">
  9.     <li>1</li>
  10.     <li>2</li>
  11. </ul>
  12. <button id="btn">click</button>
  13. <script>
  14.     let num = 3;
  15.     let eUl = document.querySelector("#id-ul");
  16.     let eButton = document.querySelector("#btn");
  17.     let eLi = document.querySelectorAll("#id-ul li");

  18.     eButton.addEventListener("click", function () {
  19.         let newLi = document.createElement("li");
  20.         eUl.appendChild(newLi);
  21.         newLi.innerText = num++;
  22.     })

  23.     for (let eLiElement of eLi) {
  24.         eLiElement.addEventListener("click",function (event) {
  25.             alert(event.target.innerText);
  26.         })
  27.     }

  28. </script>

  29. </body>
  30. </html>
复制代码
结果

可以看到:原有的元素的点击事件会被处理,但新加入的不会被处理。
到此这篇关于JavaScript事件的委托(代理)的用法示例详解的文章就介绍到这了,更多相关JavaScript事件委托内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
                                                        
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
免责声明
1. 本论坛所提供的信息均来自网络,本网站只提供平台服务,所有账号发表的言论与本网站无关。
2. 其他单位或个人在使用、转载或引用本文时,必须事先获得该帖子作者和本人的同意。
3. 本帖部分内容转载自其他媒体,但并不代表本人赞同其观点和对其真实性负责。
4. 如有侵权,请立即联系,本网站将及时删除相关内容。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表