2010-04-28 121 views
8

我有哪裏是正裝的jQuery +其它JS的頁面:加載jquery兩次會導致錯誤?

<script src="/eiv/javascripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
<script src="/eiv/javascripts/jquery.jeditable.js" type="text/javascript"></script> 
<script src="/eiv/javascripts/jquery-ui-1.7.1.custom.min.js" type="text/javascript"></script> 
<script src="/eiv/javascripts/corner.js" type="text/javascript"></script> 
<script src="/eiv/javascripts/jquery.form.js" type="text/javascript"></script> 
<script src="/eiv/javascripts/validationdate.js" type="text/javascript"></script> 

我加載標籤如下:

<%if (tabnum == 1) {%> 
     <script type="text/javascript"> 

      $(document).ready(function(){ 
       $("#tabs").tabs(); 
       $("#tabs ul li a").corner('7px top'); 

       var $tabs = $('#tabs').tabs(); 
       $tabs.tabs('select', 0); 
       dateValidation(); 
       changeOption(); 
       deleteConfirmation(); 
     }); 
     </script> 
<%} else if (tabnum==2) {%> 
     <script type="text/javascript"> 

      $(document).ready(function(){ 
       $("#tabs").tabs(); 
       $("#tabs ul li a").corner('7px top'); 

       var $tabs = $('#tabs').tabs(); 
       $tabs.tabs('select', 1); 

        changeOption(); 
        deleteConfirmation(); 
     }); 
     </script> 
<%}%> 

validationdate.js是礦建JS,檢查日期和其他的東西。它有這個作爲第一行:

document.write('<script type="text/javascript" src=""jquery-1.3.2.min.js""></script>'); 

問題: 的是,在生產在時間..this頁的錯誤,並給一個JS錯誤。這會導致選項卡不可點擊。這個錯誤間歇性地發生,我似乎無法在我的機器上重現它。兩臺機器都使用IE。錯誤也發生在Firefox中,儘管很少JS錯誤的東西不顯示在Firefox中。我甚至有螢火蟲,也沒有顯示任何JS錯誤。

我懷疑錯誤即將到來,因爲validationdate.js也正在加載jquery-1.3.2.min.js。這可能是一個錯誤?

順便說一句,在JS錯誤我得到的是「捕獲到異常而不是拋出..line 23」和線23以下

<script src="/eiv/javascripts/jquery-1.3.2.min.js" type="text/javascript"></script> 

我真的離開這裏的選擇,我願意去嘗試的東西出。還有在我的機器上重現的方法,所以我可以修復它!

+0

確保您使用的是jQuery的一個實例,它會在所有其他包含js的文件之上。 – Sarfraz 2010-04-28 17:50:58

+0

是的,我的頁面中只有jQuery的一個實例。然而,就像我說的,validationdate.js也有一個jQuery實例。所以這使得jQuery的兩個實例 – yuri 2010-04-28 17:56:09

+0

你正在用'document'寫的'script'元素。由於src屬性中雙引號的引號,write'將無法成功運行。 – interjay 2010-04-28 17:59:08

回答

12

首先來回答你的問題,是的,包括jQuery兩次會導致各種問題。

要解決它,這條線:

document.write('<script type="text/javascript" src=""jquery-1.3.2.min.js""></script>'); 

應包裝,再次檢查的jQuery已經存在,而不是盲目的,包括它,就像這樣:

if (typeof jQuery == 'undefined') { 
    document.write('<script type="text/javascript" src=""jquery-1.3.2.min.js""></script>'); 
} 

然後,將只包括它如果jQuery不在頁面上。有一點需要注意的是,如果您使用的是不同的(可能更新版本)jQuery版本,而不是驗證代碼的版本,則有可能會有一些中斷。

+0

關於雙重加載jQuery導致錯誤的部分 - 是從經驗中得到的,還是隻是一個好建議? – ripper234 2012-02-06 13:44:58

+5

@ ripper234 - 兩者...當您重新加載jQuery時,它將重新定義'window。$'和'window.jQuery',清除所有先前加載的插件。這可能是我在Stack Overflow上看到的雙重包含的最常見症狀:「爲什麼我的插件沒有定義?我包含腳本!」 – 2012-02-06 14:23:16

+0

好的,我試圖從代碼中清除它......我們爲了一些令人費解的原因而加載了jQuery兩次,並且在某些jquery-ui插件中看到了錯誤。 – ripper234 2012-02-06 15:03:24

0

使用IFRAME會導致JQuery的加載兩次,如果你
1)負載JQuery的每一頁(即Ruby on Rails的通過application.html.erb)和
2)的iframe也是從頁面您應用程序而不是外部網站的iframe。

1

我花了幾個小時搞清楚爲什麼使用jQuery.noConflict()不作爲就是工作......

只需使用 var j$ = jQuery.noConflict();和地方的$每一次使用Ĵ$後您使用jQuery上頁。

+0

或使用jQuery(函數($){}),它封裝你的函數,並允許你使用$作爲正常的 – 2013-01-02 02:14:41

相關問題