2017-10-06 6 views
0

Anwendungsfall

Ich habe einen Konflikt zwischen jstree und jquery-ui Datepicker.Arbeiten mit verschiedenen Versionen von jQuery

Ich versuche, jquery-UI-Datepicker auf eine Eingabe in DOM nach AJAX-Anfrage injiziert.

Ich verwende jsTree 3.3, die jQuery 3.1.1 und jQueryUI v1.12.1 verwendet, die jQuery 1.12.4 verwendet. Ausgabe

Wenn ich versuche, $('#datepicker').datepicker() zu nennen, wirft er eine Typeerror

(...). Picker ist keine Funktion

Was ich versucht habe bisher

Nach vielen anderen Themen, einschließlich der beiden folgenden:

Konflikt zwischen Datepicker und jstree oder multi pul

picker setzen() auf dynamisch erstellte Elemente - JQuery/jQueryUI

sieht Ihr Code wie folgt:

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(); 
    }) 
}); 

Der obige Code wird derzeit im Erfolgsrückruf der Funktion platziert, die die Eingabe in das DOM einfügt.

Dies ist die am weitesten fortgeschrittene Version von meinem JS, ich habe versucht, ohne getScript, ich habe versucht, es vor/nach jstree Objekte erstellen. Ich habe keine Ahnung, was ich vermisse oder die richtige Art, das Datepicker() zu arbeiten.

Vielen Dank im Voraus für jede Hilfe!

Zusatzinfo

ich auf Web app gerade arbeite Django Framework. $ ("# datepicker"). datepicker() funktioniert gut in Sichten, in denen ich jstree nicht benutze, also bin ich mir ziemlich sicher, dass es zwischen den beiden Plugins liegt und sehr wahrscheinlich mit jQuery-Versionen zusammenhängt.

+0

Warum brauchen Sie 2 Versionen von jquery? – bassxzero

+1

Die Funktion getScript stellt nicht sicher, dass die Bibliothek an die richtige Version gebunden ist. Es fügt nur hinzu und lädt das Skript in dom. – Jerodev

+0

Ich brauche es eigentlich nicht, aber ich fand jQuery 1.12.4 Datei in jquery-ui/external/jquery.js, also vermute ich, es ist die Version, die das Plugin verwendet. Ich habe auch versucht, es zu entfernen oder es durch meine jquery 3.x Datei zu ersetzen, aber es behebt das Problem nicht. –

Antwort

0

Werfen Sie einen Blick auf jQuery-migrate.

Es stellt die APIs wieder her, die in neueren Versionen von jQuery entfernt wurden.

In Ihrer Web-Seite, laden Sie das Plugin nach dem Skript-Tag für jQuery, zum Beispiel:

<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> 

prüfen, um weitere Informationen, um die documentation auf GitHub aus.

Hoffe, das hilft!

+0

dies ist nicht erforderlich. jQuery UI funktioniert gut mit neueren jQuery, wie deutlich auf der Website angegeben. Das Problem, das OP hat, besteht in Konflikten, da es zwei Versionen auf der Seite gleichzeitig gibt. – ADyson

+0

Ich würde lieber nicht mehr externe Plugin verwenden und ich denke, dass ich das auf eine "richtige Art und Weise" lösen kann. –

1

Sie sagen "jQueryUI v1.12.1, die jQuery 1.12.4" verwendet. Auf welcher Grundlage haben Sie diese Anforderung entschieden?

http://jqueryui.com/download/ listet einfach den Download für UI 1.12.1 wie folgt aus:

1.12.1 (Stable, für jQuery1.7 +) erfordert jquery 1.7 oder höher.

zu erhärten, http://api.jqueryui.com/ Staaten sehr deutlich

jQuery UI 1.12 unterstützt jQuery 1.7 und neuer.

Außer dieser Mindestanforderung wird keine spezifische Version erwähnt. Es gibt keinen Grund, warum Sie 3.x nicht verwenden können. Mehrere Versionen von jQuery in Ihrer Seite (oder sogar mehrere Kopien der gleichen Version) ist ein Rezept für Ärger, wie Sie festgestellt haben.

Um Ihr Problem zu lösen, können Sie jquery 1.12.4 einfach komplett aus Ihrem Projekt entfernen.

+0

Nun, tatsächlich habe ich jQuery 1.12.4 Datei in jquery-ui/external/jquery.js Ich habe versucht, es zu entfernen und ersetzen Sie es mit 3.x-Datei. Auch bevor ich mit diesem Problem konfrontiert wurde, habe ich Old-jquery.js nicht in meine Skriptdeklaration aufgenommen. –

+0

Ja, aber das ist genau das, womit es verpackt ist. Sie müssen diese Version nicht verwenden, wie in der Dokumentation eindeutig angegeben ist. Sie sagen "Ich habe versucht, es zu entfernen und durch 3.x-Datei zu ersetzen." ... naja, nicht. Ersetzen Sie es nicht durch irgendetwas. Benutze einfach deine Syc/js/jquery.js (von der ich annehme, dass sie Version 3.1.1 enthält?) Und verwende sie ** einmal ** auf deiner ganzen Seite. Wie bereits erwähnt, sollten Sie nicht mehrere Kopien laden, auch wenn sie dieselbe Version haben. Sobald Sie verifiziert haben, dass nur eine Kopie von jQuery in die Seite geladen wird, können wir, wenn Sie immer noch ein Problem haben, es erneut im Detail betrachten. – ADyson

+0

Alles klar, genau das habe ich von Anfang an gemacht (du bist) rechts Syc/js/jquery.js ist 3.1.1), aber dann bekam ich den TypeError "datepicker ist keine Funktion". Wie Sie in zusätzlichen Informationen sehen können, passiert es nur in Vorlagen, wo ich sowohl jstree als auch jquery-ui habe. Ich habe den jquery-old.js-Import entfernt und den jquery-ui-Ordner in den ursprünglichen Zustand zurückversetzt, aber es funktioniert nicht. –

Verwandte Themen