我知道一个div将出现在我页面未来DOM的某个时刻,并且我知道它的id(它是由SharePoint javascript生成的)-我是否可以在该div存在于DOM中之前使用jQuery委托将事件处理程序附加到该div?
此外,对于这个特定的场景,这与.live()相比如何?
简短回答:是
长答案:从jQuery 1.7+.on()
开始,在您提到的这两个之前,它们是首选的,不推荐使用。这是.on()
:上的一个示例
$('#parent').on("click", "span.children", function() {
if ( confirm("Are you sure?") ) {
console.log(this);
}
});
是的,你可以这样做,但你可以使用.on方法,不要使用.live
,这是不推荐的。
$(elements).delegate(selector, events, data, handler); // jQuery 1.4.3+
$(elements).on(events, selector, data, handler); // jQuery 1.7+
是,您可以,但在最新版本的jQuery中,这两种方法都被on()
所取代。
此外,live()
总是将事件处理程序附加到(文档的顶部),而delegate()
允许您选择将事件附加到哪里,因此,如果您事先知道元素将在哪里,它会更高效。
您应该使用.on()
。而且您永远不应该使用.live()
。
有关三者之间的性能测试,请参阅:http://jsperf.com/jquery-live-vs-delegate-vs-on
除了.live()
被弃用之外,与其他两个相比,它也非常慢。
基本上,您使用.on()
或.delegate()
所做的是向容器中的元素添加事件处理程序,无论这些元素是否已经存在,或者是否已动态添加到DOM中。