父网站上的脚本不在子网站上工作:$ .Deferred不是函数

时间:2015-08-18 17:15:04

标签: javascript jquery slider deferred slick.js

我有一个基于父网站建立的网站,并且需要尽可能相同。我的客户有一个进程,通过它可以获取父站点的所有脚本和css文件,并使用它们来创建子站点。但是对于其中一个网站,我在主网站上没有发生主javascript文件中的错误。

以下是两个网站:

parent site

child site

主要问题是页面顶部的轮播(我相信它使用光滑滑板)没有在子网站上初始化。我不确定这是否是因为Javascript错误,如果你能弄清楚它不能正常工作的原因,我将非常感激,因为这是手头的主要问题。那就是说,我现在假设我的问题是main.js中的javascript错误:

Uncaught TypeError: l.Deferred is not a function

同样,父站点上没有错误,但是子站点上的l.Deferred断点。为什么它不起作用?

我尝试在jQuery中包装l - $(l)。延迟 - 但是当我这样做时,它似乎会导致循环,其中页面将花费几分钟尝试加载,然后超时并崩溃。

如果你能告诉我为什么我孩子网站上的滑块不起作用,或者至少为什么l.Deferred打破了,这将是一个巨大的帮助。

编辑:更新以使用正确版本的jquery:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>jq11 = jQuery.noConflict(true);</script>
<script src="/sites/all/themes/wma2/js/main.js"></script>

(function($){
    window.matchMedia || (window.matchMedia = function(){....
})(jq11);

更新:我检查了控制台,$ .fn.jQuery正在使用jquery 1.11.2,当时它表示l.Deferred不是函数

我也尝试用正确的jquery包装l:

jq11(l).Deferred

但是当我这样做时,页面会陷入循环并在尝试加载几分钟后崩溃。

1 个答案:

答案 0 :(得分:0)

我不是百分之百确定“通过哪个进程获取父网站的所有脚本和css文件并使用它们来创建子网”的意思,但客户端页面至少在某些时候加载jQuery 1.4 .4(检查头部最后3个包含的脚本中的第一个。)

$。延迟直到jQuery 1.5,https://api.jquery.com/jquery.deferred/才引入,所以尝试使用1.4.4运行任何东西都会引发错误,因为那个函数确实不存在。

页面上的最后一个脚本加载另一个整个jQuery副本,而那个1.11确实支持Deferreds。但它几乎是在页面上运行的最后一件事,所以几乎没有代码使用它。所以你有一个旧的jQuery,然后是试图在较新的jQuery中使用方法的代码,然后是最新的jQuery。这就是为什么jQuery和$甚至没有分配给同一个东西,因为你可以在控制台中确认:

jQuery.fn.jquery:“1.4.4”

$。fn.jquery:“1.11.2”

您可能有使用旧1.4.4语法的代码,因此您可能无法替换它,但如果您确实需要两个版本,最好将所有代码明确地包装在IIFE中

(function($){ 
  /* code using $, which maps to whatever is specified at the end*/   
})(jQuery);

指定您要使用的两个中的哪一个。