2017-10-06 103 views
0

用例

我在jstree和jquery-ui datepicker之間有衝突。使用不同版本的jQuery

我想在AJAX請求後注入DOM中的輸入上使用jquery-ui-datepicker。

我使用jsTree 3.3,它使用jQuery 3.1.1和jQueryUI v1.12.1,它使用jQuery 1.12.4。 問題

當我嘗試調用$('#datepicker').datepicker(),它拋出一個TypeError

(...)。日期選擇器是不是一個函數

我到目前爲止已經試過

根據很多其他話題,包括以下兩種:

datepicker與jstree或multi之間的衝突PUL

穿上動態創建的元素日期選擇器() - JQuery的/ jQueryUI的

我的代碼看起來像這樣:

HTML:

<script src="{% static 'Syc/js/jquery.js' %}"></script> 
<script src="{% static 'Syc/js/jquery-old.js' %}"></script> <!-- version1.12.14--> 
<script src="{% static 'Syc/js/jquery-ui/jquery-ui.js' %}"></script> 
<script src="{% static 'Syc/Jstree/dist/jstree.min.js' %}"></script> 

的Javascript:

$(document).on('focus', "[id^='Date']", function() { 
var jQ = jQuery.noConflict(true); 
jQ.getScript('path/jquery-old.js', function() { 
    jQ(function() { 
     jQ(this).datepicker(); 
    }) 
}); 

上面的代碼當前放置在注入DOM中輸入的函數的成功回調中。

這是我的JS的最高級版本,我試過沒有getScript,我試圖把它放在jstree對象創建之前/之後。我不知道我缺少什麼或使datepicker()工作的正確方法。

非常感謝您的幫助!

附加信息

我正在使用使用Django Framework的Web應用程序。 $(「#datepicker」)。datepicker()在我不使用jstree的視圖中工作正常,所以根據我讀過的內容,我非常確定這是兩個插件之間的衝突,很可能與jQuery版本有關。

+0

爲什麼你需要2個版本的jquery? – bassxzero

+1

getScript函數不能確保庫綁定到正確的版本。它只會在dom中添加並加載腳本。 – Jerodev

+0

實際上我並不需要它,但是我在jquery-ui/external/jquery.js中發現了jQuery 1.12.4文件,所以我認爲它是插件使用的版本。我也嘗試刪除它或用我的jquery 3.x文件替換它,但它沒有解決這個問題。 –

回答

0

看看jQuery-migrate

它恢復在較新版本的jQuery中刪除的API。

在您的網頁,加載的jQuery插件腳本標記之後,例如:

<script src="https://code.jquery.com/jquery-3.0.0.js"></script> 
<script src="https://code.jquery.com/jquery-migrate-3.0.1.js"></script> 

退房在GitHub上documentation以獲取更多信息。

希望這會有所幫助!

+0

這不是必需的。在網站上明確指出,jQuery UI可以與新版jQuery一起使用。 OP所面臨的問題是由於在頁面上同時擁有2個版本而產生的衝突。 – ADyson

+0

我寧願不使用更多的外部插件,我想我可以用更「合適的方式」來解決這個問題。 –

1

你說「jQueryUI v1.12.1它使用jQuery 1.12.4」。你以什麼方式決定了這個要求?

http://jqueryui.com/download/簡單地列出這樣的下載UI 1.12.1:

1.12.1(穩定,對於jQuery1.7 +)需要的jquery 1.7或以上。

爲了證實,http://api.jqueryui.com/美國很清楚

jQuery UI的1.12支持的jQuery 1.7和更高版本。

除了最低要求之外沒有提及特定的版本。沒有理由不能使用3.x。正如你發現的那樣,在你的頁面中有多個版本的jQuery(甚至是同一版本的多個副本)是麻煩的祕訣。

要解決您的問題,您可以完全從您的項目中完全刪除jquery 1.12.4。

+0

實際上,我發現jQuery 1.12.4文件在jquery-ui/external/jquery.js中 我試圖刪除它並用3.x文件替換它。 另外在面對這個問題之前,我沒有在腳本聲明中包含old-jquery.js。 –

+0

是的,但這正是它所包裝的。正如文檔中明確指出的那樣,您不需要使用該版本。你說「我試圖刪除它,並用3.x文件替換它。」......不。不要用任何東西代替它。只需使用您的Syc/js/jquery.js(我假設包含版本3.1.1?)並在整個頁面中使用** **一次**。正如我上面提到的,即使它們是相同的版本,也不要加載多個副本。一旦你確認只有一個jQuery副本被加載到頁面中,那麼如果你仍然有問題,我們可以再次詳細地看一下 – ADyson

+0

好吧,這正是我在第一個地方做的(你是正確的Syc/js/jquery.js是3.1.1),但後來我得到了TypeError「datepicker不是一個函數」。正如你可以在其他信息中看到的,它只發生在我同時擁有jstree和jquery-ui的模板中。我刪除了jquery-old.js導入並將jquery-ui文件夾返回到其原始狀態,但無法使其工作。 –