javascript事件委托是什么意思
时间:2021-10-29
来源:互联网
标签:
今天PHP爱好者为您带来在javascript中,事件委托也称为事件托管或事件代理,就是把目标节点的事件绑定到祖先节点上;它是利用事件冒泡原理,管理某一类型的所有事件,利用父元素来代表子元素的某一类型事件的处理方式。希望对大家有所帮助。

本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。
在 JavaScript 中,事件委托(delegate)也称为事件托管或事件代理,是利用事件冒泡原理,管理某一类型的所有事件,利用父元素来代表子元素的某一类型事件的处理方式。
这样做的好处:优化代码,提升运行性能,真正把 HTML 和 JavaScript 分离,也能防止出现在动态添加或删除节点过程中注册的事件丢失的现象。
示例1
下面示例使用一般方法为列表结构中每个列表项目绑定 click 事件,单击列表项目,将弹出提示对话框,提示当前节点包含的文本信息。但是,当我们为列表框动态添加列表项目之后,新添加的列表项目没有绑定 click 事件,这与我们的愿望相反。
<button id="btn">添加列表项目</button>
<ul id="list">
<li>列表项目1</li>
<li>列表项目2</li>
<li>列表项目3</li>
</ul>
<script>
var ul = document.getElementById("list");
var lis = ul.getElementsByTagName("li");
for (var i = 0; i < lis.length; i ++) {
lis[i].addEventListener('cluick', function (e) {
var e = e || window.event;
var target = e.target || e.srcElement;
alert(e.target.innerHTML);
}, false);
}
var i = 4;
var btn = document.getElementById("btn");
btn.addEventListener("click", function() {
var li = document.createElement("li");
li.innerHTML = "项目列表" + i++;
ul.appendChild(li);
});
</script>
示例2
下面示例借助事件委托技巧,利用事件传播机制,在列表框 ul 元素上绑定 click 事件,当事件传播到父节点 ul 上时,捕获 click 事件,然后在事件处理函数中检测当前事件响应节点类型,如果是 li 元素,则进一步执行下面代码,否则跳出事件处理函数,结束响应。
<button id="btn">添加项目列表</button>
<ul id="list">
<li>列表项目1</li>
<li>列表项目2</li>
<li>列表项目3</li>
</ul>
<script>
var ul = document.getElementById("list");
ul.addEventListener('click', function(e) {
var e = e || window.event;
var target = e.target || e.srcElement;
if (e.target && e.target.nodeName.toUpperCase()=="LI") {
alert(e.target.innerHTML);
}
}, false);
var i = 4;
var btn = document.getElementById("btn");
btn.addEventListener("click", function () {
var li = document.createElement("li");
li.innerHTML = "项目列表" + i++;
ul.appendChild(li);
});
</script>
当页面存在大量元素并且每个元素注册了一个或多个事件时,可能会影响性能。访问和修改更过的 DOM 节点时,程序就会更慢;特别是事件连接过程都发生在 load(或 DOMContentReady)事件中时,对任何一个富交互网页来说,这都是一个繁忙的时间段。另外,浏览器需要保存每个事件句柄的记录,也会占用更多内存。
以上就是javascript事件委托是什么意思的详细内容,更多请关注php爱好者其它相关文章!
-
电脑出现normal.dotm错误怎么办?解决方法是什么? 时间:2025-12-15 -
normal.dotm在哪个文件夹里 如何删除normal模板 时间:2025-12-15 -
d3dll.dll不能启动怎么办?怎么修复? 时间:2025-12-15 -
psrpc.dll缺失的原因及解决方法 时间:2025-12-15 -
JavaScript插件Lightbox.js用法详解 时间:2025-12-15 -
isalpha()函数在Python中的用法详解 时间:2025-12-15
今日更新
-
C2C交易资金到账时间解析 快速了解转账时效与流程
阅读:18
-
学科网官网登录入口高中版-中学历史学科网官网登录通道
阅读:18
-
迅雷会员激活码哪里能免费领取-迅雷会员激活码2024最新汇总
阅读:18
-
poki小游戏免费即点即玩官网入口-poki宝玩网页版一键直达地址
阅读:18
-
皮卡丘站起来是什么梗揭秘这只萌宠爆火全网的魔性姿势由来
阅读:18
-
智学网成绩查询通道-智学网学情分析平台
阅读:18
-
欧易法币交易与数字货币交易核心区别详解
阅读:18
-
126邮箱登录入口网页版-126邮箱官网免费注册登录入口
阅读:18
-
夸克网盘入口极速上传体验-夸克网盘入口智能文件管理
阅读:18
-
皮卡是什么梗揭秘网络热词皮卡丘的爆笑由来
阅读:18










