您可以像这样将 $.on 绑定到将始终存在于 dom 中的父元素。
$(document).on('click','.test', function() {
console.log('Test clicked');
});
请注意:
您可以替换document
为将始终存在于 dom 中的元素的任何父元素,并且父元素越接近越好。
简单的事件绑定click
不会click
将事件处理程序绑定到绑定时已存在于 dom 中的元素。因此它不适用于以后通过 Ajax 或 jQuery 动态添加到 dom 的元素。为此,您必须使用event delegation
. 您可以将$.on
其用于此目的。
检查$.on的文档
您可以使用$.live
,但 $live 已贬值。改用 $.on 。$.on 的等效语法用于 $.live 和 $.delegate 做同样的事情
$(selector).live(events, data, handler); // jQuery 1.3+
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+
$(document).on(events, selector, data, handler); // jQuery 1.7+
在这种情况下,事件处理程序将绑定到document
. test
在这个案例类中,事件将由 jQuery 委托给目标元素。
更新
我建议您将$.on
所有其他方法用于所有事件处理目的,因为所有其他方法都通过$.on
和$.off
引擎盖下的方法。
从 jQuery 源代码 v.1.7.2 检查这些函数的定义
bind: function( types, data, fn ) {
return this.on( types, null, data, fn );
},
unbind: function( types, fn ) {
return this.off( types, null, fn );
},
live: function( types, data, fn ) {
jQuery( this.context ).on( types, this.selector, data, fn );
return this;
},
die: function( types, fn ) {
jQuery( this.context ).off( types, this.selector || "**", fn );
return this;
},
delegate: function( selector, types, data, fn ) {
return this.on( types, selector, data, fn );
},
undelegate: function( selector, types, fn ) {
// ( namespace ) or ( selector, types [, fn] )
return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
}
对于这些方便的事件处理程序也是如此
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
您可以看到所有正在使用的方法$.on
以及$.off
它们本身。因此,使用$.on
您至少可以保存一个函数调用,尽管在大多数情况下这并不重要。