javaScript中的事件代理

今天在看视频时,发现了 事件代理 这一方法。

假设在一个div中,有很多button,很多li标签,它们需要绑定相应的方法,如果一个一个写就太麻烦了,这时候事件代理的优点就凸显出来了。

下面看一下具体例子

// 七、事件代理,遍历每个分享li,绑定事件。
	for (var i = 0; i < boxs.length; i++) {
		// 1)在li上绑定点击事件代理
		boxs[i].onclick = function(event) {
				// e = e || window.event;
				//1.获取触发元素,取得class。
				var el = event.target || event.srcElement;
				// this 指的是box ,el指的是当前点击的元素
				//2.根据class调用不同的函数。
				switch (el.className) {
					case 'close':
						removeNode(this);
						break;
					case 'praise':
						praiseBox(this, el);
						break;
					case 'btn':
						replayBox(this, el);
						break;
					case 'comment-praise':
						praiseReply(el.parentNode);
						break;
					case 'comment-operate':
						operateReply(this, el);
						break;
				}
			}
}
这样就简单很多了吧。。。


### JavaScript 事件代理概念 事件代理是一种优化性能的技术,在处理大量子节点的 DOM 结构时特别有用。通过将事件监听器附加到父级元素上,而不是为每个子节点单独设置监听器,可以有效减少内存占用并提高效率[^1]。 ### 实现方式 当用户交互触发某个特定类型的事件(如点击)发生在目标元素上时,该事件会先被最内层的目标元素捕获,然后逐层向外传播至外层容器。如果在外层容器设置了相应的事件处理器,则可以在其判断实际发生位置,并执行对应逻辑操作[^2]。 #### 示例代码展示 下面是一个简单的例子来说明如何利用 `addEventListener` 方法实现事件委托: ```html <ul id="parent"> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> </ul> <script> const parent = document.getElementById('parent'); parent.addEventListener('click', function(event){ if(event.target.tagName === 'LI'){ console.log(`Clicked on: ${event.target.innerText}`); } }); </script> ``` 在这个案例里,虽然 `<li>` 元素本身并没有直接绑定任何事件监听函数,但由于它们都是 `#parent` 的后代子孙,因此可以通过检测冒泡过程传递过来的信息找到具体的点击项。 ### 参数细节 在调用 `addEventListener()` 函数时需要注意传入的第一个参数应为不带前缀 `'on'` 的纯字符串形式表示的事件名称,比如对于鼠标左键单击而言就是 `"click"` 而不是 `"onclick"`[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值