定期收到jQuery“...不是函数”错误

时间:2014-11-05 作者:Dean Elliott

在过去的一两周里,我遇到了一个奇怪的问题,我经常会定期得到TypeError: jQuery(...).fullpage is not a function 尝试运行小脚本时出错。

这主要发生在Firefox上,虽然我在Chrome上注意到了这一点(尽管只有一到两次),但我不知道为什么会发生这种情况,因为我使用的是多年来使用的同一主题框架,我以前从未遇到过问题。

我将jQuery和我的script.js 文件(我保存所有函数的地方)正确,下面是我尝试运行的脚本的示例;

jQuery(document).ready(function ($) {

    $(\'#fullpage\').fullpage({
        scrollOverflow: \'true\',
        sectionsColor: [\'#f2f2f2\', \'#4BBFC3\', \'#7BAABE\', \'whitesmoke\', \'#000\'],
        anchors:[\'uno\', \'dos\', \'tres\', \'quatro\'],
        normalScrollElementTouchThreshold: 30,
    });

});
只有当我试图运行一个依赖于另一个脚本的函数时,问题才会出现,在本例中,它依赖于full page script (也已正确排队)。

有人知道为什么会这样吗?为什么它几乎只限于Firefox?

另一件需要注意的事情是,如果你刷新页面几次,它似乎又能工作了。

编辑:这是我将脚本排队的方式;

function child_theme_js() {

    if(!is_admin()) {

        wp_enqueue_script(\'jquery\');

        $scripts = array(
            \'easing\',
            \'slimscroll.min\',
            \'fullpage.min\',
            \'script\'
        );
        foreach ($scripts as $script){
            wp_register_script($script, get_stylesheet_directory_uri() . \'/assets/js/\'.$script.\'.js#asyncload\', \'jquery\', \'\', true);
            wp_enqueue_script($script);
        }

    }
}

add_action(\'wp_enqueue_scripts\', \'child_theme_js\', 30);
我之前应该提到,这是一个我有问题的儿童主题。父主题是一个非常基本的起始主题(一些函数和基本CSS)

1 个回复
最合适的回答,由SO网友:Eric Holmes 整理而成

虽然脚本循环非常聪明,但fullscreen 脚本未在script.js 是这就是问题所在。我会将您的排队更改为此,然后重试。

再看一眼,我相信问题是你fullpage.min 试图用作脚本的ID。我认为. 是无效字符,因此不会将脚本排队,因为它在注册时会失败。

试试这个,应该有用。还需要考虑的一件事是,您看起来正在使用异步JS加载。这意味着script.js 文件可能比它所需的资产小,首先加载,这意味着fullpage 还没有准备好。尝试不使用异步,而是在页脚中排队。

wp_register_script( \'easing\', get_stylesheet_directory_uri() . \'/assets/js/easing.js\', array(\'jquery\'), \'\', true);
wp_register_script( \'slimscroll\', get_stylesheet_directory_uri() . \'/assets/js/slimscroll.min.js\', array(\'jquery\'), \'\', true);
wp_register_script( \'fullpage\', get_stylesheet_directory_uri() . \'/assets/js/fullpage.min.js\', array(\'jquery\'), \'\', true);
wp_register_script( \'my-script\', get_stylesheet_directory_uri() . \'/assets/js/script.js\', array( \'jquery\', \'easing\', \'slimscroll\', \'fullpage\' ), \'\', true);
wp_enqueue_script( \'my-script\' );

结束