我一直在阅读用live()
取代jQuery on()
函数,但它们的工作方式与非实时函数的工作方式相同。
例如,使用$('a').on('click', function(){});
与使用$('a').click(function(){});
我需要复制$('a').live('click', function(){});
的功能
因为我正在动态地向页面添加元素。
答案 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(){});
参数中的选择器是一个选择器,它匹配您想要处理的事件的对象,这些事件将冒泡到您的静态父对象。