【发布时间】:2014-01-09 12:15:51
【问题描述】:
我现在正在开发/已经开发了一些系统,我在编程中遇到了一个怪癖,我似乎将 所有我的 JQuery 函数委托给文档,如下所示:
$(document).on('click', '.modal-editor', function () {
//code
});
$(document).on('click', '.another-class', function () {
//code
});
$(document).on('click', '#another-id', function () {
//code
});
这有什么问题吗?
更新:
好的,所以在本质上这没有什么问题,直到:
应用程序达到了需要更多本地化委派以防止 UI 变慢的规模。 “发生的每个事件都需要针对 e.target 和文档之间的每个元素运行每个选择器”
如果使用嵌套函数,这样的委托会增加传播等意外行为的可能性。
回到我的问题(最佳实践),最佳实践是将事件委托给最接近的静态元素,以尽量避免上述情况。
【问题讨论】:
-
我不这么认为...你应该没事...
-
这可能会成为一个大规模的问题;没有一概而论的答案。
-
关于您的更新,不,我不会等待出现性能问题。 jQuery 摆脱了
.live()方法是有原因的。对于明智的做法,即使目前没有明显的好处,也有一些话要说。 -
@cookiemonster - jQuery 摆脱了
live()方法,因为它的功能过于具体。 jQuery API 倾向于使用相同的方法执行多项操作,具体取决于您提供的参数。您可以使用on()或delegate()执行与live()相同的功能以及更多功能。他们没有摆脱它,因为它不能正常工作或被滥用。 -
@Adam:除了它被滥用了。人们不知道它是如何工作的,所以他们只会使用它绑定所有元素。是的,它太具体了,但它也不能描述实际发生的事情,所以人们最终会误用它。
标签: javascript jquery delegation