.bind将会给所有匹配的元素都绑定一次事件,当元素很多时性能会变差。 而且后来动态新增的元素不会被绑定。
.delegate是另一种绑定事件的方式。它将事件处理函数绑定在指定的根元素上, 由于事件会冒泡,它用来处理指定的子元素上的事件。
.delegate 可以:
自动绑定动态添加的元素。因为事件处理函数绑定在#root上,新加的子元素事件也会冒泡到#root。
性能好于.bind()。只绑定一个事件处理函数,绑定速度相当快。
.on()才是jQuery事件的提供者。其他的事件绑定方法都是通过.on()来实现的:
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 );
},
return false来阻止冒泡和默认行为
在实践中,我们常常让事件处理函数return false来阻止冒泡和默认行为, 可以认为return false做了三件事情:
stopPropagation();
preventDefault();
立即结束当前函数并返回。
网友评论