【问题标题】:Using controls requiring different jQuery Versions使用需要不同 jQuery 版本的控件
【发布时间】:2010-02-27 19:59:51
【问题描述】:

我正在尝试在与依赖 jQuery 1.2.3 的 Flexigrid for Rails 相同的页面上使用需要 jQuery 1.3.2 的 Apycom 菜单。为了增加混乱,我试图包含 Rails 'prototype.js' 并使用它。这是我的包含订单:

<%= javascript_include_tag :defaults %>
<%= yield(:head) %>
<script src="/javascripts/jquery.js" type="text/javascript"></script>
<script src="/javascripts/flexigrid.js" type="text/javascript"></script>
<script type="text/javascript">
    jq123 = jQuery.noConflict(true)
</script>
<script src="/javascripts/menu/jquery.js" type="text/javascript"></script>
<script src="/javascripts/menu/menu.js" type="text/javascript"></script>
<script type="text/javascript">
    jq132 = jQuery.noConflict(true)
</script>

当我正在测试的页面加载时,Firebug 会为我提供以下信息:

$ is undefined
  (240 out of range 237)                                      menu.js (line 240)

因此我的菜单不起作用(至少不是重要的部分)。我在此页面上没有 Flexigrid 网格,因此我无法证明它是否有效。我看到了这个答案(How do I run different versions of jQuery on the same page?),但它并不完全有效。我的本地 JavaScript 可以工作,但 jQuery 插件似乎并不满意。

有什么建议吗?

【问题讨论】:

    标签: javascript jquery ruby-on-rails


    【解决方案1】:

    Menu.js 假设 jQuery 函数名为 $。使用jQuery.noConflict 时,您需要将jQuery 函数的引用更新为您命名的任何名称(在本例中为jq123jq321)。

    【讨论】:

    • 我使用的是混淆的 Javascript,所以我需要为菜单付费,但有一行:var $ = jQuery 我将其更改为 var $ = jq132,现在一切正常。谢谢!
    【解决方案2】:

    @MightyE 指出 menu.js 文件不正确地引用了 $ 对象。解决此问题的一个简单解决方案是打开 menu.js 文件并将内容包装在此函数调用中

    (function($) {
    
        // $ is now equal to jq321
        // menu.js stuff
    
    })(jq321);
    

    【讨论】:

    • 这并不完全奏效。他们还有一个函数调用 jQuery,当你这样做时,它会做一些未定义的工作。
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多