试图用$ .on(..)替换$ .live(..)

时间:2012-03-20 20:46:51

标签: javascript jquery events bind

我一直在阅读用live()取代jQuery on()函数,但它们的工作方式与非实时函数的工作方式相同。

例如,使用$('a').on('click', function(){});与使用$('a').click(function(){});

具有相同的效果

我需要复制$('a').live('click', function(){});的功能 因为我正在动态地向页面添加元素。

2 个答案:

答案 0 :(得分:4)

您需要提供一个选择器:

$('#container').on('click', 'a', function(){})

其中#container是所有相关主播的静态父级的id
尝试将on附加到最近的静态父级。

on docs

  

如果省略selector或为null,则将事件处理程序称为   直接或直接约束。每次事件都会调用该处理程序   发生在所选元素上,无论它是直接出现在   来自后代(内部)元素的元素或气泡。

     

提供选择器时,事件处理程序称为   授权。直接在事件发生时不会调用处理程序   绑定元素,但仅适用于后代(内部元素)   匹配选择器。 jQuery从事件目标起泡事件   到附加处理程序的元素(即最里面的)   最外面的元素)并为其中的任何元素运行处理程序   匹配选择器的路径。

答案 1 :(得分:2)

相当于:

$('a').live('click', function(){});

就是这样:

$(document).on('click', 'a', function(){});

但是,.on()更强大,因为您可以选择一个更接近动态对象的静态父级,而不是将所有事件处理程序附加到document对象。并且效率会更高,特别是如果你有很多委托的事件处理程序。

例如,如果你有一个名为links的容器div,你可以这样做:

.live()

jQuery对象中的选择器是您希望事件处理程序绑定到的静态对象。 $("#links").on('click', 'a', function(){}); 参数中的选择器是一个选择器,它匹配您想要处理的事件的对象,这些事件将冒泡到您的静态父对象。