javascript - 将所有 jquery 脚本转换为实时脚本

标签 javascript jquery load live

我有很多 jquery 脚本,它们不处理动态加载或创建的元素,当然我可以转换我所有的 scrits 并将它们添加到 .live() 函数中。但是想知道是否有任何选项或技巧可以自动模拟所有脚本中的直播功能,而无需手动修改它们。

感谢您的评论,live 已贬值,所以我用 .on() 函数重申我的问题。

最佳答案

没有一种技巧可以使所有现有的事件处理程序代码在不更新每个事件处理程序的情况下与动态加载的元素一起工作,除非您想用与 jQuery 已记录的工作方式不同的方法替换某些 jQuery 方法(不推荐)。您必须将当前使用的所有 jQuery 事件处理方法替换为强制委托(delegate)事件处理的方法。这将是一个糟糕的方法。您不仅会将 jQuery 破解成与记录不同的东西,并使自己面临与其他代码的兼容性问题,而且您将被迫以最低效的方式使用委托(delegate)事件处理(这就是为什么 .live() 首先被删除)。不要这样做。修复您的代码以使用正确的委托(delegate)事件处理方法。一点都不难。


.live() 已被弃用,甚至已从最新版本的 jQuery 中删除。你不应该使用它。有一种形式的 .on() 允许您对动态加载的对象使用委托(delegate)事件处理。您可以在这篇文章中了解如何为动态加载的元素使用正确的 .on() 形式:jQuery .live() vs .on() method for adding a click event after loading dynamic html .

对动态元素使用 .on() 的“正确”方法是这样的:

$('#parent').on("click", "#child", function() {});

在其中选择最接近动态元素的父元素,该元素本身不是动态加载的,并将事件处理程序绑定(bind)到该元素。


.live() 已被删除,因为它将所有委托(delegate)的事件处理程序放在 document 对象上,有点类似于此:

$(document).on("click", "#child", function() {});

但是,如果您使用大量这样的委托(delegate)事件处理程序,性能可能会开始下降。那是因为当您以这种方式执行此操作并单击文档中的任意位置并且该单击会冒泡到文档时,它必须比较您必须比较的每个 .live() 事件处理程序中的每个选择器当前点击的对象。由于选择器比较并不总是很快,这确实会拖慢事件的处理。

当您将事件处理程序放在离实际对象较近的对象上时,您最终会在那里放置较远的事件处理程序,因此可以比较的选择器少得多,事件处理速度更快。


这里是关于静态事件处理程序和委托(delegate)事件处理程序之间的一些差异的引用,以及关于它们的一些有用的注释:JQuery Event Handlers - What's the "Best" method

关于javascript - 将所有 jquery 脚本转换为实时脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20033061/

相关文章:

javascript - 在线广播流媒体延迟

javascript - 如何找出我的页面在 Chrome 中崩溃的原因

javascript - 如何仅使用 bootstrap 和 jQuery 制作可编辑表格?

jquery - 如何在动态生成的内容上应用 jqueryUI 方法

javascript - 如何让项目默认隐藏然后用 jquery 按钮显示?

android - Soundpool onloadcomplete 通知

javascript - 如何在浏览页面时保持音频播放?

javascript - Angular 4 Firebase 从数据库中读取数据并显示到浏览器

javascript - 使用 Google API 将 'writing' 写入 Google 电子表格时出错

php - 将外部内容加载到网站的最佳方式(我拥有所有网站)(没有 iframe?)