我是否正确理解了jQuery委托功能?

时间:2012-08-22 09:11:39

标签: jquery dom event-handling jquery-delegate

我知道在我的页面的未来DOM中会出现div,我知道它的ID(它是由SharePoint javascript生成的) - 是否可以使用jQuery delegate来附加事件在它存在于DOM之前的div的处理程序?

此外,这与特定场景的.live()相比如何?

4 个答案:

答案 0 :(得分:3)

简短回答:

答案很长:从jQuery 1.7 + .on()开始,在你提到的两个之前,它们已经被弃用了。这是.on()上的示例:

    $('#parent').on("click", "span.children", function() {
        if ( confirm("Are you sure?") ) {
            console.log(this);
        }
    }); 

答案 1 :(得分:1)

是的,你可以这样做,但是你可以使用.on方法,而不使用.live,不推荐使用它。

$(elements).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(elements).on(events, selector, data, handler);        // jQuery 1.7+

答案 2 :(得分:1)

您应该使用.on()。你永远不应该使用.live()

对于三者之间的性能测试,请参阅:http://jsperf.com/jquery-live-vs-delegate-vs-on

除了.live()被弃用之外,与其他两个相比它也很慢。

基本上,您使用.on().delegate()执行的操作是将事件处理程序添加到容器中的元素,无论元素是否已存在或是否已动态添加到DOM中。

答案 3 :(得分:1)

,你可以,但是在最近的jQuery版本中,这两种方法都被取代了on()

此外,live()始终将事件处理程序附加到(顶部)文档,而delegate()允许您选择附加事件的位置,因此如果您之前知道它可以更有效把手放在哪里。