使用live() – 好处 – 类似于bind()

我一直在阅读关于jquery现场活动的一些内容,我还是有点困惑吗? 使用它有什么好处?

http://docs.jquery.com/Events/live

我知道它与bind类似,但这些事件对我来说似乎都不合适。

只是寻找一些指针。

警告 :这个答案很老。 仍然非常有用 ,但在新版本的jQuery中已经弃用并删除了live 。 因此,请阅读答案,因为用例没有改变,您将了解为什么以及何时使用较少的事件处理程序。 但除非您仍在使用旧版本的jQuery(v1.4.2或更早版本),否则您应该考虑编写新的等效代码。 正如jQuery API for live并在此处复制:

根据其后继者重写.live()方法很简单; 这些是用于所有三种事件附件方法的等效调用的模板:

  1. $( selector ).live( events, data, handler ); // jQuery 1.3+
  2. $( document ).delegate( selector, events, data, handler ); // jQuery 1.4.3+
  3. $( document ).on( events, selector, data, handler ); // jQuery 1.7+

有时您在页面加载时会有一组元素,比如编辑链接:

 
Item 1 Edit
Item 2 Edit
Item 3 Edit

现在,也许你有这样的东西与jQuery:

 $(document).ready(function() { $('a.edit').click(function() { // do something return false; }); }); 

但是,如果在页面初始加载后动态地向该表添加新元素,该怎么办?

 $('table').append(' Item 4Edit '); 

当您在此新项目上单击“编辑”时,不会发生任何事情,因为事件是在页面加载上绑定的。 现场直播。 有了它,你可以像这样绑定上面的事件:

 $(document).ready(function() { $('a.edit').live('click', function() { // do something return false; }); }); 

现在,如果在页面初始加载后添加任何具有edit类的新元素,它仍将注册此事件处理程序。

但这是如何实现的?

jQuery使用所谓的事件委托来实现此function。 在这种情况下,或者当您想要加载大量处理程序时,事件委派会很有帮助。 假设你有一个带有图像的DIV:

 

但是,不是4个图像,而是100或200或1000.您希望将单击事件绑定到图像,以便在用户单击它时执行X操作。 像你期望的那样去做……

 $('#container img').click(function() { // do something }); 

…然后将绑定数百个处理程序,所有处理程序都做同样的事情! 这是低效的,并且可能导致繁重的webapps性能下降。 使用事件委派,即使您不打算稍后添加更多图像,使用live也可以更好地处理这种情况,因为您可以将一个处理程序绑定到容器,并检查单击目标是否为何时单击它图像,然后执行操作:

 // to achieve the effect without live... $('#container').click(function(e) { if($(e.target).is('img')) { performAction(e.target); } }); // or, with live: $('img', '#container').live('click', function() { performAction(this); }); 

由于jQuery知道以后可以添加新元素或者性能很重要,而不是将事件绑定到实际图像,它可能会像第一个示例中那样在div中添加一个(事实上,我很确定它会绑定他们到身体,但它可能在上面的例子中的容器,然后委托。 如果单击/执行的事件与您可能指定的选择器匹配,则此e.target属性可以让它在事后检查。

为了说清楚:这不仅有助于不必重新绑定事件的直接方式,而且对于大量项目来说可以大大加快。

基本上,使用.live() ,如果你有一个非常动态的网站,你不必费心更新事件处理程序。

 $('.hello').live('click', function () { alert('Hello!'); }); 

该示例将click事件绑定到已经具有“hello”类的任何元素以及动态插入的任何元素,无论是AJAX还是旧式JavaScript。

好处是,在创建这些元素时,事件处理程序也将添加到新的匹配元素中。 这使您无需在每次创建需要它的新元素(匹配以前使用的选择器)时手动添加事件处理程序。

在jQuery 1.3中添加:将处理程序绑定到所有当前和未来匹配元素的事件(如单击)。

来自http://docs.jquery.com/Events/live#typefn ,强调我的。