我应该将所有现场功能转换为代表吗?

时间:2011-04-15 05:38:36

标签: delegates jquery

根据我的问题:adding .live to click functions in jquery

似乎普遍的共识是代表>以表演为目的。我应该将我的一生转变为代表吗?如果是这样,为什么要使用live函数,因为委托更好地表现了性能?

当它在DOM中没有看到我的选择器时委托“忽略”所有内容吗?

2 个答案:

答案 0 :(得分:4)

如果没有任何明显的问题,您不应该重构代码以提高性能。但是,live()存在可能影响代码可维护性的其他问题:

  • 直播不适用于stopPropagation()
  • Live就像一个全局变量。如果使用live(),则类的不同实例可能会相互干扰。

至于为什么live()仍然存在 - 根据this article

  

作为一般的最佳做法,永远不要使用   .live在您的应用程序中。住了之后   在jQuery,Justin中引入   认为需要更好的活动   委托API和委托是   创建。 jQuery仍然是主要原因   支持live是遗留代码。

最后,delegate()live()完全相同,只是它将事件处理程序附加到您指定的元素,而live()将其附加到document。当事件冒泡到指定的元素时,如果事件不是源自或通过与给定选择器匹配的元素,则忽略该事件。

答案 1 :(得分:0)

.live()如果在DOM中找不到选择器,也会忽略任何内容。从jQuery文档http://api.jquery.com/delegate/中了解它们是如何等效的:

Delegate是使用.live()方法的替代方法,允许将事件委托的每个绑定绑定到特定的DOM元素。例如,以下代理代码:

$("table").delegate("td", "hover", function(){
    $(this).toggleClass("hover");
});

等效于使用.live()编写的以下代码:

$("table").each(function(){
    $("td", this).live("hover", function(){
        $(this).toggleClass("hover");
    });
});