2012-02-23 50 views
1

我在單個頁面上有2個js。在JS的一個我做的var jQuery = $.noConflict(true);,之後使用使用jQuery對象,就像jQuery("#div").hide();爲JQuery變量定義一個範圍,不同的js - 單個頁面

在另一個JS所有的jQuery的方法,我現在用的是傳統的$變量&訪問jQuery方法爲$("#div").hide();

當在一個頁面上我使用了兩個js',事情工作正常。但是,當我包含這兩個時,第二個js中的$似乎被jQuery覆蓋。例如,在JS 2我不能再做$("#div").hide(),但如果我使用jQuery而不是$,它工作正常 - jQuery("#div").hide();

爲什麼我會嘗試這是因爲第一個div將作爲插件分發到不同的網站,第二個js可能是該網站開發人員編寫的Jquery。

請幫我弄清楚我哪裏出錯了。

謝謝。

回答

0

解決這個問題的最簡單方法是使用插件作者使用的模式。

(function($) { 

    // Use $ safely within the function 

})(jQuery); // Passes in jQuery object 

這是函數立即創建和調用,同時允許您將一個變量傳遞給函數的作用域。使用這個,你可以在你的代碼中繼續引用$,而不用擔心覆蓋它或衝突。

jQuery documentation建議這種模式

+0

好的。我創建了一個這樣的功能,首先被調用。現在,我在這個js中有多個函數,我是否應該像這樣包裝每個函數,或者我該如何處理它? – Jayesh 2012-02-23 14:08:37

+0

只需創建一個函數,並將其作爲該特定頁面/應用程序的所有jQuery代碼的範圍。它只是作爲一個包裝器,你可以根據需要添加儘可能多的函數和變量。 – 2012-02-23 14:17:28

1

您使用的是noConflict,它釋放了jQuery在$上的保留。如果它在單獨的腳本中,無關緊要,因爲它是相同的全球環境。

在您要使用$的腳本中,在您的.ready()處理程序中定義該變量。

jQuery(function($) { 
    $('foo').bar(); 
}); 
0

文件沒有範圍,你noConflict解除引用$爲您的整個頁面。任何東西

+0

將它的工作,如果我的插件我VAR myJqueryVar = jQuery和然後我使用這個變量訪問jQuery方法?我不是推理$? – Jayesh 2012-02-23 14:23:53