【问题标题】:How to install an older "jquery-rails" gem version that I want ? --- $(...).live() not working如何安装我想要的旧版“jquery-rails”gem? --- $(...).live() 不工作
【发布时间】:2014-03-30 02:47:57
【问题描述】:

到目前为止,我一直依赖默认的 rails 4 jQuery gem 来满足我的所有 jQuery 需求 gem 'jquery-rails'。但是,对于我的应用程序的新增强,我想使用 jQuery .live() 函数,但似乎只有 1.3~ 可用。我应该手动安装我想要的 jQuery 版本而不是将它作为 gem 包含吗?指定我想要的 jQuery 版本的最佳方法是什么?

【问题讨论】:

    标签: jquery ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    自 jQuery 1.7+ 起,.live() 方法已弃用

    解决办法:

    请参阅VERSION.md 以查看哪些版本的 jquery-rails 捆绑了哪些版本的 jQuery。 例如,您可以使用 1.0.17 之前的任何 jquery-rails gem,一切都会正常工作。例如:

    gem 'jquery-rails', '1.0.16'  # This match the jQuery version 1.6.4
    

    也就是说,您应该始终使用最新版本的 jQuery,因为每次迭代都提供了大量错误修复和更好的跨浏览器兼容性。请参阅下文如何处理此问题。

    延伸阅读:

    从 jQuery 1.7+ 开始,您应该使用 .on() 来附加事件处理程序。该文档甚至建议旧版本的 jQuery 使用 .delegate() 而不是 .live()

    不再推荐使用.live() 方法,因为后来的jQuery 版本提供了没有缺点的更好的方法。

    根据其继承者重写.live() 方法很简单;这些是所有三种事件附件方法的等效调用的模板:

    $( selector ).live( events, data, handler ); // jQuery 1.3+
    $( document ).delegate( selector, events, data, handler ); // jQuery 1.4.3+
    $( document ).on( events, selector, data, handler ); // jQuery 1.7+
    

    如果您想提高对该主题的了解,请继续阅读 old .live() 方法和 new .on() 方法的官方文档。

    转换示例:

    以下三个方法调用在功能上是等效的:

    $( "a.offsite" ).live( "click", function() {
      alert( "Goodbye!" ); // jQuery 1.3+
    });
    $( document ).delegate( "a.offsite", "click", function() {
      alert( "Goodbye!" ); // jQuery 1.4.3+
    });
    $( document ).on( "click", "a.offsite", function() {
      alert( "Goodbye!" ); // jQuery 1.7+
    });
    

    【讨论】:

    • 使用 on(),如果我更新 DOM 中的 HTML,它是否会自动重新分配我在第一页加载时分配的事件(就像 live() 似乎一样)?或者我应该在 DOM 中更新 HTML 之后编写一行代码来执行此操作?我看不出文档中是否是这种情况。
    • 我几乎可以肯定它确实如此,因为行为几乎相同。但是请阅读帖子中更新的 .on() 文档,看看它是否有效。如果你愿意,可以创建一个 jsfiddle 来破解它。如果你有运气,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多