【问题标题】:jQuery conflict 1.6 and 1.7jQuery 冲突 1.6 和 1.7
【发布时间】:2012-03-22 00:01:00
【问题描述】:

你好,我写了一个像 Facebook 这样的自动完成脚本;它适用于加载单个 jQuery 版本的单个 php 页面。

我不得不在有两个 jQuery 调用的页面中使用它:一个调用 jquery-1.6.min.js,另一个调用: //ajax.googleapis.com/ajax/libs/jquery/1.7/jquery .min.js

在这种情况下,我遇到了问题,使用 jquery/1.7/jquery.min.js 的 JavaScript 不起作用。

我尝试使用 jQuery.noConflict();

但在这种情况下,使用 jquery-1.6.min.js 的脚本不起作用。

有人有什么建议吗?

谢谢 F.

【问题讨论】:

    标签: jquery


    【解决方案1】:

    如果可能,我建议您尽量避免在同一页面上使用 2 个版本的 jQuery。

    如果由于某种原因你无法避免它,那么你必须在两个版本的 jQuery 上使用 noConflict 来维护这两个版本。

    类似 var $1 = jQuery.noConflict() 和 var $2 = jQuery.noConflict() 并使用这两个不同的变量。现在在加载第二个 jQuery 文件之前执行第一个 noConflict 代码非常重要。

    【讨论】:

    • 您对“在两个版本上”使用noConflict 的建议没有多大意义,因为它们都绑定到相同范围内的相同变量名jQuery。删除(或有条件地加载)其中一个实例是唯一的解决方案。
    • 类似var $1 = jQuery.noConflict()var $2 = jQuery.noConflict() 并使用这两个不同的变量。现在在加载第二个 jQuery 文件之前执行第一个 noConflict 代码非常重要。
    • 再次:noConflict() 使 jQuery 不绑定到 $。不过,它仍然绑定到jQuery
    • 是的,没错,$jQuery 已移至 $1。当第二个jQuery 文件被加载时,jQuery 被覆盖,然后我们可以使用noConflict 将jQuery 导入$2
    • 错误。对不起。实际上,使用noConflict(true) 可以防止使用jQuery 变量。今天学到了新东西,谢谢!
    【解决方案2】:

    将加载 jQuery 1.6 的 script 标记替换为以下内容:

    if (typeof jQuery == 'undefined') {
        var script = document.createElement('script');
        script.type = "text/javascript";
        script.src = "/path/to/jquery-1.6.min.js";
        document.getElementsByTagName('head')[0].appendChild(script);
    }
    

    这可确保仅在不存在其他版本(例如 CDN 中的 1.7)时才加载您的本地 jQuery 副本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 2021-03-06
      • 2015-04-07
      • 2014-09-28
      相关资源
      最近更新 更多