回答
这很清楚在docs为什么你不想使用现场。同样如Felix所述,.on
是附加事件的更简化的方式。不再推荐
使用.live()方法,因为后来 版本的jQuery的报价不具有其 缺点更好的方法。调用
.live()
方法,其可以是 费时大型文档之前
- jQuery的尝试检索由选择器指定的要素:具体地讲,下面的问题与使用 .live()的出现。
- 不支持链接方法。例如,
$("a").find(".offsite, .external").live(...);
是 不是有效,并且不按预期工作。- 由于所有
.live()
事件都附加在document
元素上,因此事件在处理它们之前会采用最长和最慢的可能路径。- 在事件处理程序中调用
event.stopPropagation()
无法在停止附加在文档中较低位置的事件处理程序 ;该事件已经传播到document
。- 的
.live()
方法与其他事件方法的方式,可奇怪的,例如交互,$(document).unbind("click")
删除任何呼叫连接到.live()
所有点击处理 !
[..]新的。对()和.off()API的统一jQuery中安装 事件到文档的所有方式 - 他们是更短的输入[...]
Good tutorial on difference between on vs live
从上面的链接引用
什么是错的.live()
使用.live()方法不再因为后来 推荐jQuery版本提供了更好的方法,没有 的缺点。
- jQuery的尝试检索调用之前由选择 指定的要素:具体地讲,下面的问题与使用 .live()的出现。live()方法,这可能会耗费大量文档的时间。
- 不支持链接方法。例如, $(“a”)。find(“。offsite,.external”)。live(...);无效,并且 无法按预期工作。
- 由于所有.live()事件都附加在文档元素 上,因此事件在处理之前会采用最长和最慢的可能路径 。
- 在事件 中调用event.stopPropagation()处理程序在停止附加在文档 较低处的事件处理程序时无效;该事件已经传播到文档。
- 的 .live()方法与方式与其他事件的方法,可以是 令人吃惊,例如,$(文件).unbind(“点击”)将删除所有单击任何呼叫连接到.live 处理程序进行交互() !
我是一个Chrome扩展"Comment Save"它使用jQuery和其中一个用于.live()
的作者。扩展工作的方式是通过将侦听器附加到所有使用的textareas。 live()
- 这种方式运行良好,因为每当文档发生变化时它仍会将侦听器附加到所有新的textareas。
我搬到了.on()
但它不工作。只要文档发生变化,它就不会附加监听器 - 所以我已恢复为使用.live()
。这是我在.on()
中的一个错误。我想,请小心一点。
你必须错误地使用它 - 它与'.live()'方法的语法略有不同。 ('click',function(){alert('clicked');});''是'$(document).on('click' ,'p',function(){alert('clicked');});'。请注意,您在'document'上使用'.on()'方法,然后指定要附加事件处理函数以在其第二个参数中进行侦听的元素。 – ajbeaven
你可以在这里阅读更多:http://api.jquery.com/on/。查看标题下的**直接和委托事件** – ajbeaven
您是对的 - 我在写完答案后才意识到我没有正确书写它。如果以与live()相同的方式使用它,它只会起作用。 如果你在()上写的是正确的方法,但仍然不如我的经验中的live()。因为表现看起来好多了,所以我会进一步测试它。 – PixelPerfect3
从.live()
移动到.on()
时,人们偶然发现的一个区别是,将事件绑定到动态添加到DOM的元素时,参数.on()
略有不同。
下面是我们用来与.live()
方法使用语法的例子:
$('button').live('click', doSomething);
function doSomething() {
// do something
}
与
.live()
现在即将淘汰的jQuery版本1.7和1.9版本中删除,您应该使用.on()
方法。下面是一个使用.on()
方法是一个例子:
$(document).on('click', 'button', doSomething);
function doSomething() {
// do something
}
请注意,我们调用.on()
对文档,而不是按钮本身。我们在第二个参数中为正在侦听的事件指定元素的选择器。
在上面的示例中,我在文档上调用了.on()
,但是如果使用更靠近选择器的元素,则会获得更好的性能。任何祖先元素只要在页面上存在,就会在您致电.on()
之前工作。
这是解释here in the documentation但它很容易错过。
我有一个要求,以确定浏览器关闭事件。在做研究之后,我正在使用jQuery 1.8。3
打开使用超链接被点击
$( 'A')时,以下的jQuery的标志生活( '点击',函数(){cleanSession = FALSE;});
转到ON使用以下jQuery的一个标志时提交的任何时间输入按钮类型被点击
$( “输入[类型=提交]”)。住( '点击',()的函数{alert('input button clicked'); cleanSession = false;});
- 打开使用以下jQuery的时候随时形式提交标志发生
$( '形式')生活( '提交',函数(){cleanSession = FALSE;});
现在重要的事情......我的解决方案只有在我使用.live代替.on时才有效。如果我使用.on,那么在表单提交后,事件就会被解雇,而这太迟了。很多时候我的表单都是使用javascript调用提交的(document.form.submit)
因此,.live和.on之间有一个关键区别。如果您使用.live的事件被立即触发,但如果您切换到。对不能准时
这不是真的,你必须错误地使用'.on'或者代码中的其他东西导致这种情况发生。也许粘贴你的'.on'方法的代码。 – ajbeaven
是的。这不是真的。 .on()是.live()的改进版本。所以,在这里粘贴你的代码。所以我们会有一些清晰的 –
.live()方法当你处理内容的动态生成......就像我在程序中创建的那样,当我更改Jquery Slider的值时添加一个选项卡,并且我想将关闭按钮功能附加到每个将生成的选项卡上...我曾尝试代码..
var tabs = $('#tabs').tabs();
// live() methos attaches an event handler for all
//elements which matches the curren selector
$("#tabs span.ui-icon-close").live("click", function() {
// fetches the panelId attribute aria-control which is like tab1 or vice versa
var panelId = $(this ).closest("li").remove().attr("aria-controls");
$("#" + panelId).remove();
tabs.tabs("refresh");
});
和它的作品preety很多很酷...
.live()
此方法用于为所有匹配当前选择器的元素(现在和将来)附加事件处理程序。
$("#someid").live("click", function() {
console.log("live event.");
});
和
.on()
该方法用于连接一个事件处理函数的一个或多个事件,以低于所选定的元素是示例。
$("#someid").on("click", function() {
console.log("on event.");
});
- 1. jQuery on或live?
- 2. Jquery .on与.live
- 3. jQuery on()或live
- 4. jquery .live on load event
- 5. jquery .live to .on in jquery upgrade
- 6. jquery .live on load函数
- 7. jquery live replced to on not working
- 8. jQuery - 将.live()转换为.on()
- 9. JQuery替换live ::`delegate`或`on`
- 10. jquery 1.9 live()to on()对象
- 11. jquery live on:选择器后
- 12. JQuery和live()
- 13. jQuery .live()和IE
- 14. Live和jQuery的
- 15. JQuery Live和Sortable
- 16. jquery live()和$ this
- 17. Jquery Live和Draggable
- 18. 在纯JS重新创建jQuery live/on
- 19. Jquery“live”很好,但“on”不在jsfiddle
- 20. Google Closure事件代理a'la jQuery live/on
- 21. 使用slimscroll与jquery live()或on()
- 22. 如何复制jQuery live()stopPropagation覆盖on()
- 23. 将.live或.on添加到jquery函数
- 24. jquery on live(点击)提交表格
- 25. JQuery - 在哪里添加.on()/。live()函数?
- 26. 将函数转换为Live/On(jQuery)
- 27. Jquery正在改变.live to .on,
- 28. .live()to .on()问题
- 29. Ruby on rails live update
- 30. jQuery live()和更改
只是想知道,如果这是为什么他们不改善活方法而不是创建新的on方法。除非有什么活着可以做但不是吗? – neobie
@neobie,它使你的代码更有意义,并且具有统一性 –
@neobie:我想它是为了保持向后兼容性。在这个答案中指出的差异显示了他们的行为如何稍有不同。如果'live()'被修改为具有'on()'的行为,它可能会破坏现有的代码。 jQuery人士表示,他们不一定害怕“破坏”遗留代码,但我想在这种情况下,他们认为不冒风险引入回归是有意义的。 – rinogo