我试图在与Flexigrid for Rails相同的页面上使用需要jQuery 1.3.2的Apycom菜单,这取决于jQuery 1.2.3。为了增加混乱,我试图包含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插件似乎并不高兴。
有什么建议吗?
答案 0 :(得分:1)
Menu.js假设jQuery函数被称为$
。使用jQuery.noConflict
时,您需要将对jQuery函数的引用更新为您命名的内容(在本例中为jq123
或jq321
)。
答案 1 :(得分:1)
@MightyE指出menu.js文件错误地引用$对象。解决此问题的一个简单解决方案是打开menu.js文件并将内容包装在此函数调用中
(function($) {
// $ is now equal to jq321
// menu.js stuff
})(jq321);