如何调试此JavaScript错误?

时间:2014-05-22 15:10:23

标签: javascript jquery

我被要求修复网站问题,我遇到了JavaScript错误的问题。

在主页上,[已移除网站链接],我收到错误Uncaught TypeError: undefined is not a function。但是,正在加载jQuery插件时,该行上调用的函数(第30行)应该存在。

调用堆栈只显示一系列指向jQuery文件的匿名函数。我无法确定为什么会产生未定义的函数错误。

我尝试使用Chrome调试程序逐步执行发生错误的代码,但它似乎只是突出显示每个步骤的jQuery源文件。

我的问题是:

  1. 如果跟踪只是jQuery源文件中的一系列匿名函数,我该如何跟踪问题的来源呢?
  2. 我在这里缺少什么或者我没有考虑?
  3. 谢谢。

    修改

    目前尚不清楚,被调用的方法jQuery.ContentSlider实际上包含在文件testimonials.js内的页面中。

    这不仅仅是“我的代码有什么问题”的问题,还有一个关于我如何在JavaScript& jQuery具体。

    匿名函数的调用堆栈让我感到困惑,我已经尝试采取明显的步骤,例如验证插件是否包含在内并在尝试使用该插件之前进行此包含。

    很抱歉这个混乱。

    编辑 - 找到解决方案

    看来虽然jQuery和插件在使用之前都包含在内,但Joomla正在注入相同jQuery文件的另一个副本!模块。由于这与Google托管的jQuery文件完全相同,因此Chrome Developer Tools的“资源”标签中没有显示两次。 Chrome似乎会解析jQuery两次,但不会将其显示为包含两次。因此,附带插件的版本被覆盖了。

    谢谢那些回答的人。感谢A. Wolff提请我注意有关“资源”选项卡的信息。

1 个答案:

答案 0 :(得分:2)

实例化后,您正在加载滑块。

颠倒这两个区块的顺序:

    <script type="text/javascript">
        $(function() {
            jQuery('#two').ContentSlider({
                width : '440px',
                height : '240px',
                speed : 400,
                easing : 'easeOutQuad',
                textResize : true
            });
        });
    </script>

    <script src="/templates/sp/javascript/jquery.sudoSlider.min.js"></script>

编辑:关于调试的良好问题的核心,通常Undefined is not a function,尤其是在处理框架时,是在方法存在之前尝试访问方法的症状这就是你尝试的函数调用返回undefined而不是函数的原因。

它几乎总是在尝试调用它之后加载框架的结果,或者在异步上下文中,不等待框架加载或执行重要的事情。

编辑2:上面的答案是不正确的,因为A.Wolff指出:并不是说你必须颠倒两个街区的顺序,而是: 1)第二个框架可能不是你想要的那个,或者 2)当您打算致电jQuery('#two').ContentSlider时,(或适用于该框架的任何内容),您已致电.sudoSlider