jQuery
中提供了四种事件监听方式,分别是bind
、live
、delegate
、on
,对应的解除监听的函数分别是unbind
、die
、undelegate
、off
。
bind
.bind
,监听器绑定到目标元素上,会将所有匹配的元素都绑定一次事件。因此,当元素很多时,后来动态添加的元素不会被绑定。
$(selector).bind(event,data,function)
- event:事件,必选,一个或多个事件;
- data:参数,可选;
- fn:绑定事件发生时执行的函数,必选。
$("#foo").bind('click',function(){
console.log("clicked");
})
它不会绑定到在它执行完后动态添加的那些元素上。当元素很多时,会出现效率问题。当页面加载完的时候,你才可以进行
bind()
,所以可能产生效率问题。
live
.live
,监听器绑定到document
上,利用事件委托,可以像调用bind
一样调用live
方法,但两者的底层实现不一样。.live
绑定的事件也会匹配到那些动态添加的元素,而且,被live
绑定的事件只会被附加到document
元素上一次,因此提高了性能。
$(selector).live(event,data,function)
delegate
.delegate
与.live
类似,不会监听器绑定到你指定的附加元素上,而不是document
上,也利用了事件委托,因此也提高了性能。但是该方法不能直接由bind
过渡 。
$(selector).delegate(childSelector,event,data,function)
on
$(selector).on(event,childSelector,data,function)
1.7版本
新添加的,也是推荐使用的事件绑定方法。其实bind
、live
、delegate
都是通过该方法实现的:
<script>
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 ) {
return arguments.length == 1 ? this.off( selector, "**" ) : this.off( types, selector, fn );
</script>
// Bind
$( "#members li a" ).on( "click", function( e ) {} );
$( "#members li a" ).bind( "click", function( e ) {} );
// Live
$( document ).on( "click", "#members li a", function( e ) {} );
$( "#members li a" ).live( "click", function( e ) {} );
// Delegate
$( "#members" ).on( "click", "li a", function( e ) {} );
$( "#members" ).delegate( "li a", "click", function( e ) {} );
网友评论