随着DOM结构的复杂化和Ajax等动态脚本技术的运用导致如今的js界里最火热的一项技术应该是‘事件委托(event delegation)’了,什么是事件委托呢?小七给你娓娓道来,说白了就是想给子元素添加事件反而添加到父元素的身上,现在的你可能会说博主有病,放屁脱裤子多此一举,那么博主告诉你博主放屁是不脱裤子的,下面说下什么时候使用事件委,(1)考虑一个ul,在li的数量非常少的时候,为每一个li添加事件当然不会存在太多性能方面的问题,但是当列表非常的长for循环太浪费内存,长到上百上千甚至上万的时候,为每个li添加事件就会对页面性能产生很大的影响。(习惯用ul了,其他元素嵌套关系自行脑补)(2)给一个ul里面的几个li添加了事件但是如果动态又生成了li则刚生成的li不具备事件这时就需要用到委托。
使用委托的优点:原本需要给多个元素添加事件的现在只需要给他们的父元素添加事件,提高性能,提高可读性。
那么现在是不是有点了解了呢?废话不多说直接上图,高清无码的哦、
点击每一个li都会触发事件alert出1。
HTML:

Jq代码不用委托:


Jq代码事件委托:

li就是子元素,jq委托的格式就是这样记住就行,当然on可以用bind,live,delegate.然而为什么小七没用呢自然是有原因的。
jQuery 1.3之前使用.bind()实现委托给他已经存在的子元素绑定事件,但不能给未来新增的元素绑定事件
为了突破单一.bind()方法的局限性jQuery 1.3使用live()方法但却只能放在直接选择的元素后面,不能在层级比较深,连缀的DOM遍历方法后面使用,即$(“ul”").live...可以,但$("body").find("ul").live...不行;
后来,为解决“事件传播链”过长的问题, jQuery 1.4.2干脆直接引入了一个新方法.delegate()。
根据jQuery 1.7 Beta 1的发版说明,jQuery 1.7为了解决.bind()、.live()和.delegate()并存造成的不一致性问题,将会增加一对新的事件方法:.on(),所以不用纠结用刀还是用枪了以后直接用迫击炮(on()方法)
提示:使用事件委托时,如果注册到目标元素上的其他事件处理程序使用.stopPropagation()阻止了事件传播,那么事件委托就会失效。

关于事件委托的整理 ,另附bind,live,delegate,on区别的更多相关文章

  1. jQuery中的bind() live() delegate()之间区别分析

    jQuery中的bind() live() delegate()之间区别分析 首先,你得要了解我们的事件冒泡(事件传播)的概念,我先看一张图 1.bind方式 $('a').bind('click', ...

  2. jQuery bind()与delegate()的区别

    笔试题: bind()与delegate()的区别主要有三点: 1 绑定目标 .bind直接绑在目标元素上 .delegate绑在父元素上 2  监听个数 .bind监听个数多——每个目标元素都需要添 ...

  3. jquery实现input输入框实时输入触发事件代码 ---jQuery 中bind(),live(),delegate(),on() 区别

    复制代码 代码如下: <input id="productName" name="productName" value="" /> ...

  4. jQuery事件函数bind,live,delegate的区别

    DOM树 首先,可视化一个HMTL文档的DOM树是很有帮助的.一个简单的HTML页面看起来就像是这个样子: 事件冒泡(又称事件传播) 当我们点击一个链接时,其触发了链接元素的单击事件,该事件则引发任何 ...

  5. jQuery 中bind(),live(),delegate(),on() 区别(转)

    当我们试图绑定一些事件到DOM元素上的时候,我相信上面这4个方法是最常用的.而它们之间到底有什么不同呢?在什么场合下用什么方法是最有效的呢? 准备知识: 当我们在开始的时候,有些知识是必须具备的: D ...

  6. 转 jQuery 中bind(),live(),delegate(),on() 区别

    当我们试图绑定一些事件到DOM元素上的时候,我相信上面这4个方法是最常用的.而它们之间到底有什么不同呢?在什么场合下用什么方法是最有效的呢? 准备知识: 当我们在开始的时候,有些知识是必须具备的: D ...

  7. jQuery中.bind() .live() .delegate() .on()区别

    $(selector).bind(event,data,function) $(selector).live(event,data,function)//jquery1.9版本以下支持,jquery1 ...

  8. jQuery 中bind(),live(),delegate(),on() 区别

    on()来改写通过 .bind(), .live(), .delegate()所注册的事件 /* The jQuery .bind(), .live(), and .delegate() method ...

  9. on bind live delegate的区别

    bind()----直接绑定在元素上 live()----通过冒泡的方式绑定到元素上,更适合于列表类型的绑定,和bind()相比,支持动态数据 delegate()----精确的小范围的适用事件代理, ...

随机推荐

  1. Oracle11g温习-第十章:存储架构

    2013年4月27日 星期六 10:38 1.oracle 存储架构: 1)  database  ------------tablespace-------------segment(对象) --- ...

  2. Unity3D中的函数方法和解释

    一.刷新函数 Update 当MonoBehaviour启用时,其Update在每一帧被调用. LateUpdate 当Behaviour启用时,其LateUpdate在每一帧被调用. FixedUp ...

  3. SQL Server 存储过程 (需整理)

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...

  4. jquery插件Loadmask

    Loadmask是一个jquery plugin,使用此插件可以在DOM元素加载或更改内容时为此DOM元素添加一个屏蔽层,以防止用户互动,同时起到提醒用户后台任务正在运行的作用. 它可实现的效果:

  5. Elasticsearch单机下多实例配置

    ##################### Elasticsearch Configuration Example ##################### index.cache.field.ty ...

  6. 信号处理函数的返回sigsetjmp/siglongjmp

    由于在信号处理期间自动屏蔽了正在被处理的信号,而使用setjmp/longjmp跳出信号处理程序时又不会自动将 信号屏蔽码修改会原来的屏蔽码,从而引起该信号被永久屏蔽. 可以使用sigsetjmp/s ...

  7. JavaScript学习总结(三)——逻辑And运算符详解

    在JavaScript中,逻辑 AND 运算符用双和号(&&)表示 1 var bTrue = true; 2 var bFalse = false; 3 var bResult = ...

  8. stimulsoft report工具—— 简单的多表连接打印报表例子

    一.用报表工具打印多个表格信息(包括学生表.教师表.班级表) 1.准备打印的数据(用sqlserver) 1)班级表

  9. 【DevExpress v17.2新功能预告】DevExtreme TreeList

    在即将到来的v17.2中,您可以查看到DevExtremeHTML5 TreeList小部件的这些新功能. 1. 递归选择模式 TreeList将包括一个新的递归选择模式,您只需一次点击即可选择或取消 ...

  10. 【LeetCode 234_链表】Palindrome Linked List

    ListNode* ReverseList(ListNode *p) { if (p == NULL || p->next == NULL) return p; ListNode *pre = ...