|
|
1
2
只需指出,.delegate()目前实际上在内部使用.live()并取消.live()的版本,这意味着需要进行一些框架工作。 除非您动态地向页面添加元素,否则可以将其用作第一个示例。.live()和.delegate在您有一个交互式页面时起作用,在该页面中您要对其中包含的元素进行更改。 编辑:向下投票者:来自jquery论坛: http://forum.jquery.com/topic/depreciating-live 引用此代码: 委托:函数(选择器、类型、数据、fn){ 返回this.live(类型、数据、fn、选择器); } 我的观点是,如果适当的话,特定的选择器将限制事件,并且仅仅选择.delegate()并不总是最好的,并且没有全局的“总是这样做”。否则,为什么不将.delegate()用于所有不好的方面呢? 何时委派合适?当您的选择器确实有一个公共父级(如op所描述的常用li)时,或者需要通过.delegate()绑定到公共父级。不适用于单数形式的选择器,但对于存在多个数或发生元素动态放置的类或元素选择器,值得检查。 |
|
|
2
1
代表团概念 如果一个父级中有多个元素,并且您希望在这些元素上处理事件,则不要将处理程序绑定到每个元素。相反,请将signle处理程序绑定到其父级,并从event target获取子级。 那么,什么是JavaScript事件委托? 事件委托是一种简单的技术,通过它,您可以将单个事件侦听器附加到父元素上,该父元素将为匹配选择器的所有子元素激发,无论这些子元素现在存在还是将来添加。 事件委托使用了两个经常被忽视的javascript事件特性:事件冒泡和目标元素 什么是事件冒泡? 在事件冒泡中,事件首先由最内部的元素捕获和处理,然后传播到外部元素。 什么是目标元素? 任何事件的目标元素都是源元素,并存储在事件对象的属性中。 例子
单击列表组中的锚时,我们希望将其文本记录到控制台。通常,我们可以使用.on()方法直接绑定到每个锚的click事件:
虽然这很好用,但也有缺点。考虑当我们在绑定了上述侦听器之后添加新的锚时会发生什么:
如果我们点击我们新添加的项目,什么都不会发生。这是因为我们先前附加的直接绑定事件处理程序。直接事件仅在调用.on()方法时附加到元素。在本例中,由于调用.on()时新的锚不存在,因此它不获取事件处理程序。 因为我们知道事件如何冒泡,所以可以创建委托事件:
注意我们是如何将a部分从选择器移动到.on()方法的第二个参数位置的。第二,selector参数告诉处理程序监听指定的事件,当它听到该事件时,检查该事件的触发元素是否与第二个参数匹配。在本例中,触发事件是我们的锚标记,它与该参数匹配。由于匹配,我们的匿名函数将执行。我们现在已经将一个单击事件侦听器附加到我们的上,它将侦听其子锚定上的单击,而不是仅将未知数量的直接绑定事件附加到现有锚定标记。 活动代表团的优势是什么? 只在页面上附加一个事件侦听器,而不是500个 动态创建的元素仍将绑定到事件处理程序。 希望这能帮助您直观地了解活动授权背后的概念,并使您相信授权的力量! 参观: http://www.scriptcafe.in/2014/03/what-is-event-delegation-in-jquery.html |
|
|
3
0
事件委托允许您不将事件绑定到单个元素,而是绑定到元素的公共父元素。 但是.live()的效率很低,因为当事件冒泡时,它会冒泡到文档中,这可能与您可以手动指定的公共父级相差很多步。 委托通过允许您指定一个更近的父级(不一定是文档)来修复此问题。 简而言之,使用.delegate(),它得到了关于.live()的所有优点,并修复了有问题的方面。 换一种说法是:.live()默认情况下是文档的气泡。您可以指定一个更近的上下文,这样可以消除它的低效性。.delegate()只是帮助您做到这一点的sugar方法。 |