2017-10-06 155 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文件夹返回到其原始状态,但无法使其工作。 –

相关问题