在 jQuery的开发过程当中,咱们每每须要处理各类事件,例如,click(),hover()等。在jQuery的API中,咱们可使用不一样的方法来将 这些事件绑定到特定的元素中。今天这篇文章中,咱们将要介绍如何使用bind(),on(),live()和delegate()方法来绑定特定的事件, 什么状况下使用,什么状况下不适用它们。但愿可以帮助你们更好的了解和使用jQuery的时间处理方法。若是你喜欢咱们的文章,请给咱们留言,谢谢!html
使用较早版本jQuery的教程或者应用中,咱们每每使用bind()方法来将事件绑定到特定的元素上,以下:jquery
<section id="container"> <img class="scv" src="images/scv.gif" alt="Terran unit" /> </section>
$('.scv').bind('click', function(){ $('#container').append('<img class="scv" src="images/scv.gif" alt="Terran unit" />'); });
若是你查看相关jQuery1.7.1最新文档的话,你们应该知道最新的jQuery中bind目前其实最后也是调用on()方法来实现的,因此呢,若是如今你们使用最新jQuery版本(目前为1.7.1)的话,尽可能避免使用bind()方法。app
在线演示性能
如 果你们点击运行上面在线演示的话,确定会发现,当点击第一个图片时,会生成新的图片,可是若是你点击新生成的图片,不会继续执行添加新图片的操做。为何 会这样呢? 由于使用bind绑定的元素是页面上全部存在的class="scv"的元素,新生成的元素添加到DOM,并无绑定咱们添加的click方法。那么怎么 让新的图片也能够绑定咱们click方法呢。咱们可使用clone()方法,以下:优化
$('.scv').bind('click', function(){ $(this).clone(true).appendTo('#container'); });
咱们这里使用clone方法来生成一个新的图片,而且添加到#container容器中。这里咱们使用clone方法参数true,表明克隆的元素同时克隆绑定的方法。这里咱们运行在线演示看看效果,以下:this
在线演示code
你们能够看到如今咱们点击新添加的图片,也能够生成新的图片了。htm
在老的jQuery版本中,咱们有一个方法专门用来处理动态生成的元素的事件绑定 - live(),使用live()方法能够将方法绑定的效果应用到已存在或者新建立的DOM元素。代码以下:教程
$('.scv').live('click', function(){ $(this).clone().appendTo('#container'); });
在线演示事件
若是你们运行演示,能够看到以上代码一样也能够达到效果。
live()调用过程以下:
咱们首先将click方法绑定到了Document,而后,查找Document里是否有.scv这个元素。 这个过程对于性能来讲可能比较浪费,因此咱们可使用以下带参数方法优化方式:
$('.scv', '#container').live('click', function(){ $(this).clone().appendTo('#container'); });
以上代码中咱们使用#container做为绑定的上下文,jQuery将会在#container这个元素中查询.scv元素。代码以下:
在最新的jQuery版本中,咱们最好不要使用live()方法,由于它已经被放弃了,这里咱们使用delegate方法来指定事件绑定的上下文,以下:
$('#container').delegate('.scv','click', function(){ $(this).clone().appendTo('#container'); });
你们能够看到以上代码中,咱们首先设定了方法绑定的上下文 - #container,而后,寻找class为.scv的元素,再绑定click方法。
注意:这里克隆后添加到的元素应该是你定义的上下文,不然,新生成的图片绑定不上click方法。
其实在最新版本的jQuery类库中,全部以上方法在后面其实都是调用on()方法,因此,若是你开发最新版本的jQuery,彻底可使用on()方法来处理全部的事件绑定,避免过多的方法调用。以下:
$('.scv').on('click', function(){ $(this).clone(true).appendTo('#container'); });
代码和bind方法同样。
总 的来讲,最新的jQuery版本中,全部的方法基本最后都使用on()方法来处理,若是你针对新版本的jQuery作开发,你们能够考虑使用 delegate()和on()方法处理事件绑定,虽然之前方法也能够用,可是大都都已经退出历史舞台。