JavaScript的事件委托技术

如果一个整体页面里有大量的按钮.我们就要为每一个按钮绑定事件处理程序.这样就会影响性能了。DOM访问次数增多,就会导致延迟加载页面.事实上,从如何来利用好事件处理程序,还是有很好的解决方案的.

一、事件委托

对事件处理程序过多的问题解决的方案就是事件委托技术.

事件委托技术利用了事件冒泡.只需指定一个事件处理程序.

我们可以为某个需要触发事件的父元素来绑定事件处理程序.

HTML代码:

<ul id = "ul1">

  <li id = "li1"></li>

  <li id = "li2"></li>

  <li id = "li3"></li>

</ul>

现在我们要为这3个li绑定事件处理程序..

只需要在ul绑定事件处理程序即可,在js中每一个函数都是一个对象,如果有n个处理函数的话就会创建n个对象,对象就会占用很多内存,内存中的对象越多性能就越差。我们可以采用事件委托技术只给其父元素加一个处理函数,然后利用事件委托给其子元素,相当于只创建了一个对象,如果在一个复杂的web应用程序中,这种事件委托是非常实用的,对提高性能有很大的帮助。

js代码:

var oUl = document.getElementById("ul1");

aLi = [].slice.call(oUl.getElementsByTagName("li"));

oUl.onclick = function(e)

{

  e = e || event;

  var target = e.target || e.srcElement;

  var index = aLi.indexOf(target);

  switch (index)

  {

    case 0:

    alert("li1");

    break;

    case 1:

    alert("li2");

    break;

    case 2:

    alert("li3");

    break;

  }

}

时间: 2024-08-27 19:00:15

JavaScript的事件委托技术的相关文章

提升性能-事件委托技术

--- title: 提升性能——事件委托技术 date: 2016-05-11 22:13:43 tags: [javascript,improving performance, font-end] --- 提升页面性能之事件委托技术 (整理摘选自<Javascript高级程序设计>)概述 利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件. 实际例子 HTML部分 <ul id = "mylinks"> <li id = "g

Javascript的事件委托和事件处理

随着Ajax和RIA越来越成为主流,Javascript对事件(Event)的支持也得到了越来越多的关注.像雅虎这样的公司正在突破RIA的极限,让web应用程序在浏览器中更有效的运行,就像桌面应用程序一样.雅虎的邮箱应用就是一个很好的例子. 雅虎的一些工程师给我们展示了提高Javascript应用程序性能的技术.其中有提到强大的事件处理架构.提高性能的要旨就是用事件委托(Event Delegation)而非传统的事件处理(Event Handling). 我发现一个问题是,网上大部分的例子是用

JavaScript中事件委托(事件代理)详解

在JavaScript的事件中,存在事件委托(事件代理),那么什么是事件委托呢? 事件委托在生活中的例子: 有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托给前台MM代为签收.现实当中,我们大都采用委托的方案(公司也不会容忍那么多员工站在门口就为了等快递).前台MM收到快递后,她会判断收件人是谁,然后按照收件人的要求签收,甚至代为付款.这种方案还有一个优势,那就是即使公司里来了新员工(不管多少),前台MM也会在收到寄给新员工的快递后核实并代为签收. 事

javaScript绑定事件委托 demo

事件绑定通常发生在 onload 或 DOMContentReady , 事件绑定占用 处理时间 占用内存, 而且不是每个事件都会被 点击执行. 由此 事件委托 可以优化事件绑定行为.. 事件逐层冒泡 直到被父级元素捕获. 事件代理  给外层元素绑定一个处理事件, 就可以处理子元素上出发所有事件. DOM 标准 事件三个阶段: 捕获 到达目标. 冒泡 IE 不支持捕获, 但冒泡够用了. event.currentTarget 事件处理程序当前正在处理事件的那个元素 event.target 事件

【JavaScript】事件委托

事件委托 例如ul中有很多li,一般是给li上添加事件 若想提高性能,需要将事件委托给li的父元素ul 方法 ↓ 解决方法就是采用事件委托,将在li 对象上面要处理的事件委托给父元素或者祖先元素,即为父元素绑定事件监听.修改代码如下所示:<script>(function () { var a = document.getElementById('list'); a.addEventListener('click', function (e) { var b = e.target; alert

JavaScript, JQuery事件委托

1.引言 现实当中,前台MM收到快递后,她会判断收件人是谁,然后按照收件人的要求签收,甚至代为付款.(公司也不会容忍那么多员工站在门口就为了等快递); 这种事件委托还有个好处,就是即便公司又来很多员工,前台MM照样可以签收新员工的快递,新员工即便刚来但一样拥有拿自己快件的方法: 2.概念 通俗来讲: 事件有:onclick.onmouseover.onmouseout等等:委托呢,就是让别人来做,这件事情本身是加在元素上,然而你却加载别人身上来做,完成事件: 3.原理 利用冒泡原理,将事件加在父

JavaScript事件委托的技术原理

如今的JavaScript技术界里最火热的一项技术应该是‘事件委托(event delegation)’了.使用事件委托技术能让你避免对特定的每个节点添加事件监听器:相反,事件监听器是被添加到它们的父元素上.事件监听器会分析从子元素冒泡上来的事件,找到是哪个子元素的事件.基本概念非常简单,但仍有很多人不理解事件委托的工作原理.这里我将要解释事件委托是如何工作的,并提供几个纯JavaScript的基本事件委托的例子. 假定我们有一个UL元素,它有几个子元素: <ul id="parent-l

JavaScript 事件委托的技术原理

如今的 JavaScript 技术界里最火热的一项技术应该是'事件委托(event delegation)'了.使用事件委托技术能让你避免对特定的每个节点添加事件监听器:相反,事件监听器是被添加到它们的父元素上.事件监听器会分析从子元素冒泡上来的事件,找到是哪个子元素的事件.基本概念非常简单,但仍有很多人不理解事件委托的工作原理.这里我将要解释事件委托是如何工作的,并提供几个纯JavaScript的基本事件委托的例子. 假定我们有一个UL元素,它有几个子元素: 1 2 3 4 5 6 7 8 <

JavaScript学习之事件委托

1 内存和性能 在JavaScript中,添加到页面上的事件处理程序的数量直接关系到页面的整体运行性能: 首先,每个函数都是对象,都会占用内存:内存中的对象越多,性能就越差. 其次,必须事先指定所有事件处理程序,会导致DOM访问次数增加,会延迟整个页面的交互就绪时间. 2 事件委托 事件委托就是事件目标本身不处理事件,而是把处理任务委托给其父元素或祖先元素.事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件. 事件委托解决了"事件处理程序过多"的问题. 假定现