jQuery的.on('click')与.click()之间的区别

时间:2013-11-24 20:20:16

标签: javascript jquery

有人可以帮我理解这两个jQuery函数之间的区别吗?

$('#theElement').click(function() {
    ... click handler code ...
});

$('body').on('click', '#theElement', function() {
    .... click handler code ...
});

根据jQuery's documentation.click()只是.on('click')的捷径。这就是我总能找到它的方式。但是,我注意到今天构建原型时的一个关键区别。在尝试将偶数侦听器分配给尚未在DOM中的元素时,我无法使用.click()。但是,如果我使用$('body').on('click', '#theElement'...执行此操作,则会有效!

试图理解为什么......

.on()是否与.click()没有的事件捕获有关?

感谢任何能帮助我指明正确方向的人。这让我疯了!

2 个答案:

答案 0 :(得分:3)

.click().trigger('click')的别名,而.click(data, fn).on('click', null, data, fn)的别名。

您可能无法传入第二个参数,在这种情况下,.on('click', null, data, fn)仍会使用data作为处理程序而不是fn来绑定处理程序。

此外,这意味着无法通过.click(...)分配代理,因此如果您需要事件委派,则应使用.on(...)

来自最新的source

jQuery v1.10.2,第7554-7564行:
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
    "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
    "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {

    // Handle event binding
    jQuery.fn[ name ] = function( data, fn ) {
        return arguments.length > 0 ?
            this.on( name, null, data, fn ) :
            this.trigger( name );
    };
});

答案 1 :(得分:1)

除了他们的共同点:

  • .click()可以触发点击事件

      

    描述:将事件处理程序绑定到"单击" JavaScript事件,或触发元素上的该事件。

  • .on()使用委托,这意味着您可以将事件定位/附加到动态创建的内容(只要.on()方法应用于代码运行时存在的父元素

      

    描述:将一个或多个事件的事件处理函数附加到所选元素。[...] 在页面下方更多:委派事件的优势在于它们可以处理来自后续元素稍后添加到文档