RaY*_*ell 93
主要区别在于,live对于将在页面加载后(即通过javascript代码)创建的元素也将起作用,同时bind仅绑定当前现有项目的事件处理程序.
// BIND example
$('div').bind('mouseover', doSomething);
// this new div WILL NOT HAVE mouseover event handler registered
$('<div/>').appendTo('div:last');
// LIVE example
$('div').live('mouseover', doSomething);
// this new appended div WILL HAVE mouseover event handler registered
$('<div/>').appendTo('div:last');
Run Code Online (Sandbox Code Playgroud)
更新:
jQuery 1.7弃用live()方法和1.9已删除它.如果要使用1.9+实现相同的功能,则需要使用一种新方法on(),该方法在文档对象上调用的语法略有不同,并且选择器作为参数传递.因此,上面转换为这种新的绑定事件方式的代码将如下所示:
// ON example
$(document).on('mouseover', 'div', doSomething);
// this new appended div WILL HAVE mouseover event handler registered
$('<div/>').appendTo('div:last');
Run Code Online (Sandbox Code Playgroud)
Wat*_*ios 27
我使用FF分析器对.bind()vs .live()vs .delegate()进行了统计分析.我每次做了10轮(不是一个足够明确的样本,但说明了这一点).这些是结果.
1)使用click事件具有id的单个静态元素:
.bind(): Mean = 1.139ms, Variance = 0.1276ms
.live(): Mean = 1.344ms, Variance = 0.2403ms
.delegate(): Mean = 1.290ms, Variance = 0.4417ms
Run Code Online (Sandbox Code Playgroud)
2)使用click事件的具有公共类的多个静态元素:
.bind(): Mean = 1.089ms, Variance = 0.1202ms
.live(): Mean = 1.559ms, Variance = 0.1777ms
.delegate(): Mean = 1.397ms, Variance = 0.3146ms
Run Code Online (Sandbox Code Playgroud)
3)使用click事件的多个动态元素(第一个按钮创建第二个......):
.bind(): Mean = 2.4205ms, Variance = 0.7736ms
.live(): Mean = 2.3667ms, Variance = 0.7667ms
.delegate(): Mean = 2.1901ms, Variance = 0.2838ms
Run Code Online (Sandbox Code Playgroud)
解释你的愿望,但在我看来,随着动态元素在页面上的增加,.delegate()似乎具有最佳性能,而静态元素在.bind()中表现最佳.
请记住,我正在使用一个非常简单的点击事件来触发警报.具有不同环境的不同页面(即CPU,多标签浏览,运行线程等)将呈现不同的结果.我用它作为我决定使用其中一个的基本指南.请告知您是否提出了不同的结果.
谢谢!
and*_*ser 11
从v1.7开始,.live,.bind和.delegate都已被http://api.jquery.com/on/取代.on
我自己很好奇,所以我写了一篇包含一些代码示例的文章. http://blog.tivix.com/2012/06/29/jquery-event-binding-methods/.
听起来像取决于你如何调用.on(),jquery会模仿.bind,.live或.delegate.这为您的事件处理程序提供了更优雅的实现.