【问题标题】:Why do I have to use multiple jQuery libraries to get my scripts working?为什么我必须使用多个 jQuery 库才能让我的脚本正常工作?
【发布时间】:2012-10-17 14:12:45
【问题描述】:

我在我正在制作的网站上使用以下代码:

            <!-- ScrollTo & highlightfade -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>              
<script type="text/javascript" src="'.$url.'/js/jquery.scrollTo-min.js"></script>
<script type="text/javascript" src="'.$url.'/js/jquery.highlightFade.js"></script>
<script type="text/javascript" src="'.$url.'/js/init.js"></script>

            <!-- The rest of the scripts -->
<script type="text/javascript" src="http://code.jquery.com/ui/1.8.23/jquery-ui.min.js"></script>

<script type="text/javascript" src="'.$url.'/js/jquery.tipTip.js"></script>
<script type="text/javascript" src="'.$url.'/js/jquery.nivo.slider.pack.js"></script>
<script type="text/javascript" src="'.$url.'/js/nivo.slider.js"></script>
<script type="text/javascript" src="'.$url.'/js/nicEdit.js"></script>
<script type="text/javascript" src="'.$url.'/js/expand.js"></script>
<script type="text/javascript" src="'.$url.'/js/turn.js"></script>
  • 如您所见,我使用了 2 个 jQuery 库 理解,是完全错误的。问题是它只适用于这个 大大地!如果我删除其中一个,一些脚本将无法工作。我也有 试图将库更新到最新版本并且只使用它 版本,但只有少数上述脚本有效。

  • 我的第二个问题是:当我尝试加载 datetimepicker 脚本时 不起作用,似乎是因为jQuery库冲突。

我不能让所有的脚本只用一个库同时工作,当使用两个库时,datetimepicker-script 不起作用。我做错了什么?

【问题讨论】:

  • 你的js控制台报错了吗?为什么要插入 nivo.slider 两次?
  • 您正在使用带有 jQ​​ueryUI 的 jQuery,这完全没问题。

标签: jquery version conflict


【解决方案1】:

您正在使用 jQuery 和 jQuery UI 以及一大堆插件,这并没有错。我的假设是,如果您对此不确定,请在使用前阅读有关 jquery 和 UI 的更多信息。

如果日期选择器造成问题,请查看一些相关示例以尝试了解您做错了什么 - http://jqueryui.com/datepicker/

编辑: @user1580380 jquery 和 jquery UI 是两个独立的东西,第一个是不错的简单 js 库,第二个是添加额外功能的 UI,例如 datepicker。您确实需要包含两者才能使日期选择器正常工作。您的错误很可能发生在您的日期选择器实现中,请随意粘贴一些代码。

编辑:我注意到您使用的是 jquery 1.3,这很可能是问题所在,请将其更新到最新版本 1.8.x,看看是否可以纠正任何问题。

【讨论】:

  • 不要告诉人们不要使用某些东西,因为他们还不完全了解它。 jQuery 成功的主要原因之一是它降低了新开发人员的门槛。为什么不提供更具建设性的建议,例如使用 firefox/firebug 进行调试,并将代码发布在 init.js 此处,以便有人发现问题。
  • 如前所述,我不是说不要使用它,我是说在使用之前阅读它。
  • 但是脚本不应该只由一个库运行吗?我可以让所有脚本一个接一个地工作,但不能只与一个库一起工作。在我看来,有些脚本需要旧版本才能工作,但是当我用谷歌搜索这个主题时,每个人都一直在告诉我要更新库……
  • Billy Moon:你能解释一下那个调试的东西是什么以及我如何使用它吗?
  • 安装firebug,点击console标签,运行页面时会显示js错误
【解决方案2】:

您的代码 sn-p 显示多种类型的脚本:

  1. 核心 jQuery
  2. 使用和依赖jQuery的jQuery插件脚本
  3. 您自己的使用和依赖 jQuery 的脚本
  4. jQuery UI(基于 jQuery 构建的 UI 库)
  5. 使用和依赖 jQuery 和 jQuery UI 的 jQuery 插件脚本

每个使用 jQuery 的脚本都是针对特定版本的 jQuery 编写和测试的。有时,它适用于多个版本的 jQuery,有时它只适用于一个特定版本的 jQuery。

使用 jQuery 的脚本的作者有责任指定它与哪些版本的 jQuery 兼容。使用脚本的人有责任了解和理解所需的 jQuery 版本,并为脚本正常工作创建适当的环境(存在正确版本的 jQuery)。

特定版本的 jQueryUI 仅与特定版本的核心 jQuery 兼容。同样,jQueryUI 插件仅与 jQueryUI 和 jQuery 的某些版本兼容。您自己必须混合和匹配所有这些的兼容版本。

如果您希望使用多个插件,每个插件都需要不同版本的 jQuery,有时可以管理它,但设置起来并不容易,它不是使用 jQuery 的有效方式,而且需要一些自定义编程来加载多个版本并确保正确的插件获得正确版本的 jQuery。一般来说,完全不建议这样做,因为它效率低下、复杂且容易搞砸,特别是如果您不是高级 javascript 开发人员。

首先,您应该列出您拥有的每个脚本都说它兼容的 jQuery 版本。当您拥有该列表时,您可以开始了解什么可能与什么兼容,或者开始研究如何找到一组脚本来解决您的问题,这些脚本都与相同版本的 jQuery 兼容。

例如,jQueryUI 1.8.23 比 jQuery 1.3.2(一个相当老的核心 jQuery 库版本)更新了很多。我建议从这两个开始,并确保它们兼容。然后,只添加与您最终得到的这两者的组合兼容的插件。您需要查阅每个插件的文档以了解它与哪些版本的 jQuery 兼容。如果它没有任何关于 jQuery 兼容性的文档,则查看插件的源代码,看看那里是否有任何指示。如果仍然没有任何兼容性信息,那么您将不得不进行自己的测试/调试以确定兼容性或选择其他能够提供兼容性信息的解决方案。

如果您是 jQuery 和 javascript 开发的相对新手,那么您可能希望坚持使用包含有关哪些有效和哪些无效的文档的组合,并构建您的环境以与他们的测试要求兼容。调试和修复不兼容问题不是初学者的话题。您可能(也可能无法)能够识别问题出现在 javascript 调试控制台中的第一个位置,但修复您发现的错误是一个更高级的主题。

如果您最终确定必须在同一页面上为不同的插件加载多个版本的 jQuery,并且没有更好的方法来解决您的问题,那是可能的,但必须小心。此jQuery doc page 描述了如何完成此操作的基础知识。

【讨论】:

  • 非常感谢您的回答!我列出了所有脚本以及他们在演示站点上使用的 jQuery 版本。这是让它更清楚一点还是我必须更深入地挖掘? - jQuery v1.8.2:jquery.scrollTo-min.js - jQuery v1.7.2:expand.js - jQuery v1.4.2 jquery.highlightFade.js,(init.js) - jQuery v1.4+:jquery.nivo.slider .pack.js, nivo.slider.js - jQuery v1.3.2: jquery.tipTip.js - jQuery v1.3+: turn.js - 只是“jQuery & jQueryUI”: jquery-ui-timepicker-addon.js, jquery -ui,sliderAccess.js - 没有 jQuery:nicEdit.js
  • @user1580380 - 我建议尝试找出哪些脚本与 jQuery 1.8.2 或 1.7.2(jQuery 的两个最新版本)兼容。你真正想要做的是选择一个相当新的 jQuery 核心版本,它们都可以兼容。任何保持最新的像样的插件站点都应该有关于它与哪些版本的 jQuery 兼容的信息。如果您最终得到一两个与您选择的版本不兼容的落后者,请自己测试它们,找到使它们兼容的替代品或补丁,自己编写功能或不使用。
  • @user1580380 - 如果您最终得到一个插件,但找不到 v1.8.2 或 v1.7.2 解决方案,并且您必须拥有该功能,那么您可以学习如何正如我在答案中链接的那样,仅为该插件加载特定版本的 jQuery。这应该是最后的手段,因为它既棘手又低效,而且我不会为多个其他版本的 jQuery 这样做。
  • 非常感谢您的帮助!我切换到 1.7.2 并更新了 UI 库,但似乎一切正常:) 非常感谢你们所有人!
猜你喜欢
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 2012-04-07
  • 2013-01-20
  • 1970-01-01
相关资源
最近更新 更多