Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

jquery中的事件 #23

Open
incuisting opened this issue Sep 7, 2017 · 0 comments
Open

jquery中的事件 #23

incuisting opened this issue Sep 7, 2017 · 0 comments

Comments

@incuisting
Copy link
Owner

.bind()将会给所有匹配的元素都绑定一次事件,当元素很多时性能会变差。 而且后来动态新增的元素不会被绑定。

<div id='foo'></div>
<script>
$('#foo').bind('click',function(){
    console.log('clicked!');
});
</script>

.unbind()用来解除事件绑定,如果unbind参数为空,则解绑匹配元素的所有事件处理函数
代码示例:

$('#foo').unbind('click');

.delegate()是另一种绑定事件的方式。它将事件处理函数绑定在指定的根元素上, 由于事件会冒泡,它用来处理指定的子元素上的事件。因为事件处理函数绑定在#root上,新加的子元素事件也会冒泡到#root。因为只绑定一个事件处理函数,绑定速度相当快,性能好于.bind()
代码示例

<div id="root">
  <a>Alice</a>
  <a>Bob</a>
</div>
<script>
$('#root').delegate('a', 'click', function(){
    console.log('clicked');
});
</script>

.live()这个方法提供了一种手段,将委托的事件处理程序附加到一个页面的document元素.由于所有的 .live() 事件被添加到 document 元素上,所以在事件被处理之前,可能会通过最长最慢的那条路径之后才能被触发,所以.delegate的性能会好于.live`。

代码示例:

$("a").live("click", function() { return false; });

on()作为jQuery事件的提供者。其他的事件绑定方法都是通过.on()来实现的,既然.on()是最通用的jQuery事件机制,那么上述的所有例子都可以用.on()来实现

// bind 
$( "#foo" ).bind( "click", function( e ) {} );
$( "#foo" ).on( "click", function( e ) {} ); 

// delegate 
$( "#root" ).delegate( "a", "click", function( e ) {} );
$( "#root" ).on( "click", "a", function( e ) {} );

.live()方法,它与delegate是类似的, 不过它强制指定了root是document(即this.context),因而性能略差。 自jQuery1.7起已经不推荐使用了。

off()移除用.on()绑定的事件处理程序。它也与.on()相似是jQuery事件的提供者,其他是事件解除绑定方法都可以通过.off()来实现

//unbind,bind的对应移除方法
$('#container a').unbind('click');
$('#container a').unbind();//解除匹配元素的所有事件

//off
$('#container a').off('click');
$('#container a').off();
//die ,live的对应移除方法
$('#container a').die('click');

//off
$('#container').off('click', 'a');
//undelegate,delegate的对应移除方法
$('#container a').undelegate('a', 'click');

//off
$('#container a').off('click', 'a');
综上所述推荐使用.on()off()这一对绑定和解除绑定方法
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant