2017-10-06 2 views
0

ユースケース

jstreeとjquery-ui datepickerの間に競合があります。異なるバージョンのjQueryを使用する

私はjQuery-ui-datepickerを、AJAXリクエストの後にDOMに挿入された入力に使用しようとしています。

私は、jQuery 3.1.1とjQueryUI v1.12.1を使用するjsTree 3.3を使用しています。これはjQuery 1.12.4を使用しています。 問題は

私は$('#datepicker').datepicker()を呼び出すようにしようと、それは例外TypeError

(...)。日付ピッカーは、私が これまでに試したどのような機能

ではありません

以下の両方を含む他の多くのトピックに従う:

datepickerとjstreeまたはmultiとの間の競合

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(); 
    }) 
}); 
- 日付ピッカーを入れPUL

()動的に作成された要素にはJQuery/JQueryUI

私のコードはそうのように見えます

上記のコードは、現在、DOMに入力を注入する関数の成功コールバックに配置されています。

これは私のJSの最も進んだバージョンです。私はgetScriptなしで試しました。私はjstreeオブジェクトの作成の前後に配置しようとしました。私は、私が欠けているか、またはdatepicker()を動作させるための正しい方法については考えていません。

事前のお手伝いをさせていただきます。

追加情報

私はDjango Frameworkを使用してWebアプリケーションを開発中です。 $( "#datepicker")。datepicker()はjstreeを使用しないビューでうまくいきます。読んだことによると、おそらくjQueryバージョンに関連した2つのプラグインの間の競合です。

+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を復元します。あなたのWebページで

、例えば、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は、Webサイトに明示されているように、新しいjQueryでうまく動作します。 OPの問題は、一度にページに2つのバージョンがあるために競合しています。 – ADyson

+0

私はむしろより多くの外部プラグインを使用したくないと思います。私はこれをより適切な方法で解決できると思います。 –

1

あなたはと言っています。「jQueryUI v1.12.1はjQuery 1.12.4を使用します」どのような基準でこの要件を決めましたか? jqueryの1.7以上が必要です

1.12.1(安定、jQuery1.7 +用):

http://jqueryui.com/download/は、単にこのようなUI 1.12.1のダウンロードが一覧表示されます。

非常に明確に、 http://api.jqueryui.com/状態を裏付けるためのjQuery UI 1.12のjQuery 1.7以降をサポートしています。

最小要件とは別に特定のバージョンは記載されていません。 3.xを使用することはできません。あなたのページに複数のバージョンのjQuery(あるいは同じバージョンの複数のコピー)を持つことは、あなたが発見したように、トラブルのレシピです。

問題を解決するには、プロジェクトからjquery 1.12.4を完全に削除するだけです。

+0

実際にjquery-ui/external/jquery.jsのjQuery 1.12.4ファイルが見つかりました 私はそれを削除して3.xファイルに置き換えようとしました。 この問題に直面する前に、スクリプト宣言にold-jquery.jsが含まれていませんでした。 –

+0

はい、それだけでパッケージ化されていることです。ドキュメンテーションが明確に述べているように、あなたはそのバージョンを使う必要はありません。あなたは「私はそれを削除し、それを3.xファイルに置き換えようとしました」と言っています。それを何かに交換しないでください。あなたのSyc/js/jquery.js(私はバージョン3.1.1を含んでいると想定していますか?)を使用してください。上記のように、同じバージョンであっても、複数のコピーが読み込まれないようにしてください。ページにjQueryのコピーが1つだけロードされていることを確認したら、まだ問題が残っている場合は、もう一度それを見ることができます。 – ADyson

+0

これはまさに私が最初にやったことですright Syc/js/jquery.jsは3.1.1ですが)、TypeErrorを取得しました。 "datepickerは関数ではありません"。あなたが追加情報で見ることができるように、それはjstreeとjquery-uiの両方を持っているテンプレートでのみ起こります。私はjquery-old.jsのインポートを削除し、jquery-uiフォルダを元の状態に戻しましたが、動作しません。 –

関連する問題