`
xiaomiya
  • 浏览: 131787 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

js中的事件委托

阅读更多

知识点温故而知新

 

1,什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件。

也就是:利用冒泡的原理,把事件加到父级上,触发执行效果。

好处呢:1,提高性能。

我们可以看一个例子:需要触发每个li来改变他们的背景颜色。

<ul id="ul">
	<li>aaaaaaaa</li>
	<li>bbbbbbbb</li>
	<li>cccccccc</li>
</ul>

 

window.onload = function(){
	var oUl = document.getElementById("ul");
	var aLi = oUl.getElementsByTagName("li");

	for(var i=0; i<aLi.length; i++){
		aLi[i].onmouseover = function(){
			this.style.background = "red";
		}
		aLi[i].onmouseout = function(){
			this.style.background = "";
		}
	}
}

 这样我们就可以做到li上面添加鼠标事件。

但是如果说我们可能有很多个li用for循环的话就比较影响性能。

下面我们可以用事件委托的方式来实现这样的效果。html不变

window.onload = function(){
	var oUl = document.getElementById("ul");
	var aLi = oUl.getElementsByTagName("li");

/*
这里要用到事件源:event 对象,事件源,不管在哪个事件中,只要你操作的那个元素就是事件源。
ie:window.event.srcElement
标准下:event.target
nodeName:找到元素的标签名
*/
	oUl.onmouseover = function(ev){
		var ev = ev || window.event;
		var target = ev.target || ev.srcElement;
		//alert(target.innerHTML);
		if(target.nodeName.toLowerCase() == "li"){
		target.style.background = "red";
		}
	}
	oUl.onmouseout = function(ev){
		var ev = ev || window.event;
		var target = ev.target || ev.srcElement;
		//alert(target.innerHTML);
		if(target.nodeName.toLowerCase() == "li"){
		target.style.background = "";
		}
	}
}

 

好处2,新添加的元素还会有之前的事件。

我们还拿这个例子看,但是我们要做动态的添加li。点击button动态添加li

如:

<input type="button" id="btn" />
<ul id="ul">
	<li>aaaaaaaa</li>
	<li>bbbbbbbb</li>
	<li>cccccccc</li>
</ul>

 不用事件委托我们会这样做:

window.onload = function(){
	var oUl = document.getElementById("ul");
	var aLi = oUl.getElementsByTagName("li");
	var oBtn = document.getElementById("btn");
	var iNow = 4;
	for(var i=0; i<aLi.length; i++){
		aLi[i].onmouseover = function(){
			this.style.background = "red";
		}
		aLi[i].onmouseout = function(){
			this.style.background = "";
		}
	}

	oBtn.onclick = function(){
		iNow ++;
		var oLi = document.createElement("li");
		oLi.innerHTML = 1111 *iNow;
		oUl.appendChild(oLi);
	}

	
}

 这样做我们可以看到点击按钮新加的li上面没有鼠标移入事件来改变他们的背景颜色。

因为点击添加的时候for循环已经执行完毕。

 

那么我们用事件委托的方式来做。就是html不变

window.onload = function(){
	var oUl = document.getElementById("ul");
	var aLi = oUl.getElementsByTagName("li");
	var oBtn = document.getElementById("btn");
	var iNow = 4;

	oUl.onmouseover = function(ev){
		var ev = ev || window.event;
		var target = ev.target || ev.srcElement;
		//alert(target.innerHTML);
		if(target.nodeName.toLowerCase() == "li"){
		target.style.background = "red";
		}
	}
	oUl.onmouseout = function(ev){
		var ev = ev || window.event;
		var target = ev.target || ev.srcElement;
		//alert(target.innerHTML);
		if(target.nodeName.toLowerCase() == "li"){
		target.style.background = "";
		}
	}
	oBtn.onclick = function(){
		iNow ++;
		var oLi = document.createElement("li");
		oLi.innerHTML = 1111 *iNow;
		oUl.appendChild(oLi);
	}
}

 

ok:

如同在我们用微博中,新发微博照样有之前的鼠标事件。

 

分享到:
评论

相关推荐

    JavaScript之事件委托.pdf

    JavaScript中的事件委托是一种高效处理大量动态元素事件的技术,它的核心思想是将事件监听器绑定到父级元素上,而不是直接绑定到每一个子元素。这种方法基于事件冒泡的机制,能够减少对DOM的操作,提高页面性能。 ...

    js对象创建,事件委托测试

    js对象创建,事件委托测试,this apply call

    观察者模式Vs事件委托Demo

    **事件委托** 是一种在JavaScript中广泛使用的机制,用于高效地处理大量事件。与每个元素都绑定事件监听器不同,事件委托将监听器放在共享的父元素上,然后通过事件冒泡机制来捕获子元素的事件。这降低了内存消耗,...

    【JavaScript源代码】JavaScript给事件委托批量添加事件监听详细流程.docx

    ### JavaScript事件委托详解 #### 一、事件委托概念 **事件委托**是一种常见的JavaScript编程技巧,主要用于优化事件处理。它的核心思想是利用事件冒泡机制,将原本应该绑定在子元素上的事件处理器绑定在其父元素...

    Button添加事件委托问题

    事件委托是一种优化JavaScript事件处理的技术,它允许我们为父元素绑定一个事件处理器,而不是为每个子元素单独绑定,这样可以减少内存占用并提高性能。 在描述中提到了“自定义控件间传值”和“异步更新”,这可能...

    选项卡事件委托demo

    在IT领域,特别是前端开发中,事件委托是一种常见的优化技巧,用于处理大量动态元素的事件绑定。本示例“选项卡事件委托demo”主要展示了如何使用事件委托来实现在TabControl控件中的功能交互。TabControl是一种多...

    事件委托实例

    标题中的“事件委托实例”指的是在编程中,尤其是JavaScript或Web开发中的一种高效处理大量事件的方法。事件委托是基于事件冒泡或事件捕获机制,将事件监听器添加到父级元素而不是每个子元素上,以此来减少内存占用...

    JS中的事件委托实例浅析

    JavaScript中的事件委托是一种高效处理大量动态元素事件的技术,它的核心思想是将事件监听器添加到父级元素上,而不是直接添加到每个子元素。通过利用事件冒泡的特性,当子元素触发事件时,事件会向上冒泡到父元素,...

    使用JavaScript事件综合查询,js事件大全

    JavaScript事件是浏览器或Node.js环境中发生的特定行为,如用户点击按钮、页面加载完成或输入框获得焦点等。事件驱动编程是JavaScript的核心特性之一,通过监听和处理这些事件,我们可以创建响应式的用户体验。 二...

    javascript事件监听与事件委托实例详解

    本文实例讲述了javascript事件监听与事件委托。分享给大家供大家参考,具体如下: 事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听。但是当页面中存在大量需要绑定事件的元素时,这种...

    JavaScript事件委托的技术原理 – WEB骇客1

    JavaScript事件委托是一种优化网页性能和管理动态元素的事件处理策略。在传统的事件处理方式中,我们通常会在每个需要响应事件的元素上单独设置事件监听器。然而,这种方法在元素数量较多或者元素动态增删时,可能...

    【JavaScript源代码】基于事件冒泡、事件捕获和事件委托详解.docx

    在事件委托中,我们不在每个子元素上直接绑定事件处理器,而是将其绑定到它们的共同祖先元素上。当事件在子元素中触发时,事件会冒泡到父元素,然后在那里被处理。通过检查事件的`event.target`属性,我们可以确定...

    【JavaScript源代码】javascript事件冒泡,事件捕获和事件委托详解.docx

    尽管在实际应用中事件捕获使用较少,但它有助于在事件到达目标元素之前进行预处理。 下面的代码展示了事件捕获的例子: ```javascript window.onload = function() { let box = document.getElementById("box...

    JavaScript动态添加事件之事件委托

    事件委托是JavaScript中处理动态内容和事件绑定的一种高效方式。在Web开发过程中,经常会出现需要动态添加内容到页面的情况,例如从服务器异步加载数据并将其展示在页面上。如果这些动态添加的内容需要响应某些交互...

    JavaScript之事件委托实例(附原生js和jQuery代码)

    事件委托是JavaScript编程中一种非常重要的技术,用于高效地处理大量的DOM元素的事件。它的基本原理是基于事件冒泡机制,即在父元素上设置事件监听器,利用事件冒泡原理来处理子元素的事件。这种技术的主要优点是...

    C# 中的委托和事件究竟有何不同

    在C#编程语言中,委托和事件是两个关键的概念,它们在处理方法调用和对象间的通信方面扮演着重要角色。对于任何C#开发者来说,理解这两者的差异至关重要,尤其是在面试过程中,这个问题经常被用来评估候选人的专业...

    js代码-js事件委托

    在事件委托中,我们通常使用冒泡阶段,因为大多数情况下,这是默认的行为,并且更符合我们的需求。 在实际应用中,事件委托常用于表格、列表、选项卡等组件,尤其是与数据绑定结合时,例如使用AJAX动态加载数据。...

    javascript 中的事件委托详解

    JavaScript中的事件委托是一种高效处理大量元素事件的策略,它基于事件冒泡和捕获机制。在上述面试题中,如果需要给1000个`li`元素添加点击事件,直接给每个元素绑定事件会导致代码冗余且不易管理。通过事件委托,...

    事件集合js事件集合js事件集合

    JavaScript(简称JS)是Web开发中的重要脚本语言,它主要用于网页和浏览器交互,处理用户输入、动画效果、异步通信等。"事件集合"在JS中是指一系列与用户交互或浏览器行为相关的事件,比如点击、鼠标移动、页面加载...

Global site tag (gtag.js) - Google Analytics