2010-02-27 36 views
0

我想在Flexigrid for Rails的相同页面上使用需要jQuery 1.3.2的Apycom菜单,它依赖于jQuery 1.2.3。为了增加混淆,我试图包含Rails的prototype.js,并使用它。这里是我的包括订单:使用需要不同jQuery版本的控件

<%= 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> 

当我测试负载的页面中,萤火虫给我下面的:

$ 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插件似乎并不高兴。

有什么建议吗?

回答

1

Menu.js假定jQuery函数被调用$。在使用jQuery.noConflict时,您需要将对jQuery函数的引用更新为任何您命名的内容(在此例中为jq123jq321)。

+0

我正在使用混淆Javascript,所以我需要为菜单付钱, :var $ =我更改为var $ = jq132的jQuery,现在一切都很顺利。谢谢! – 2010-02-27 21:21:26

1

@MightyE提供了一个很好的观点,即menu.js文件不正确地引用$对象。解决这个问题的简单方法是打开menu.js文件并打包这个函数调用的内容

(function($) { 

    // $ is now equal to jq321 
    // menu.js stuff 

})(jq321); 
+0

这并没有完全奏效。他们也有一个函数调用jQuery,当你这样做的时候会做一些不确定的工作。 – 2010-02-27 21:20:55

相关问题