2010-02-27 53 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

相關問題