有人可以帮我理解这两个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()
没有的事件捕获有关?
感谢任何能帮助我指明正确方向的人。这让我疯了!
答案 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()方法应用于代码运行时存在的父元素
描述:将一个或多个事件的事件处理函数附加到所选元素。[...] 在页面下方更多:委派事件的优势在于它们可以处理来自后续元素稍后添加到文档。