【问题标题】:Why won't wordpress load my jQuery script?为什么 wordpress 不能加载我的 jQuery 脚本?
【发布时间】:2017-07-08 16:48:19
【问题描述】:

我的 wordpress 网站不会将脚本加载到我的页面中。我将以下函数放在functions.php中:

function nav_script () {

    wp_enqueue_script( 'script', get_stylesheet_directory_uri() .'/js/script.js', array('jQuery'), '1.0.0', true);

}

add_action('wp_enqueue_scripts', 'nav_script'); 

scripts.js中包含的脚本如下:

$(document).ready(function() {
    var stickyNavTop = $('.blog-nav').offset().top;
                             
        var stickyNav = function(){
        var scrollTop = $(window).scrollTop();
                        
                    if (scrollTop > stickyNavTop) { 
                        $('.blog-nav').addClass('sticky');
                    } 
                    else {
                        $('.blog-nav').removeClass('sticky'); 
                    }
                };
                                 
            stickyNav();
                                 
        $(window).scroll(function() {
            stickyNav();
    });
});

当我查看页面的源代码时,我没有看到脚本,所以由于某种原因它没有被加载......我在头部有 wp_head 并且在正文结束标记之前有 wp_footer,所以我对可能发生的事情一无所知,有人可以帮忙吗?正如我在 JSFiddle 中尝试的那样,该函数在普通的 html 中工作......

正在编辑...伙计们,我通过“手动”将脚本添加到函数中来实现一些目标,如下所示:

    function nav_script () {
        ?>
        <script>
            
            $(document).ready(function() {
                                var stickyNavTop = $('.blog-nav').offset().top;
                                 
                                    var stickyNav = function(){
                                    var scrollTop = $(window).scrollTop();
                            
                                    if (scrollTop > stickyNavTop) { 
                                            $('.blog-nav').addClass('sticky');
                                    } else {
                                            $('.blog-nav').removeClass('sticky'); 
                                    }
                                    };
                                     
                                    stickyNav();
                                     
                                    $(window).scroll(function() {
                                        stickyNav();
                                });
                            });
            
        </script>
        <?php
    }

add_action('wp_head', 'nav_script');    

但我注意到两件事: 一:头部不插入&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"&gt;&lt;/script&gt; CDN不行; 二:只有当我重新加载网站时它才会起作用,这表明我存在一些插件冲突......

【问题讨论】:

  • 查看源代码?还是检查 DOM?两种截然不同的东西!
  • 我右键查看页面源代码,你可以在这里看到:jsfiddle.net/7undbb8L@NiettheDarkAbsol
  • “页面源”是在运行任何 JavaScript 之前从服务器接收到的。
  • 但如果脚本存在于页面中,它也应该在页面源代码中,就在头部不?
  • 如果它被其他东西动态加载,则不会。

标签: javascript php jquery html wordpress


【解决方案1】:

我已经解决了我的问题。对于第一个问题,即 .js 文件没有加载到页面中,因为源代码中不存在,我使用了类似于我之前使用的代码,只是更简单,删除了 array 和与版本和页脚相关的值,就像这样:function

blognav_script () {
    wp_enqueue_script('blognav', get_stylesheet_directory_uri() . '/js/script.js');
}

add_action('wp_enqueue_scripts', 'blognav_script');

...我不能准确地说出原因,但是如果您将我的源代码与我在 cmets 上发布的源代码进行比较,您会注意到“/js/script.js”的存在。 - 页面来源:https://jsfiddle.net/qx5fbxa7/ -.

第二个问题:除非我刷新页面(已编辑),否则脚本不会加载...我用条件逻辑解决了设置类的条件:

// function to run on page load and window resize
    function stickyUtility() {

        // only update navOffset if it is not currently using fixed position
        if (!jQuery(".blog-nav").hasClass("fixed")) {
            navOffset = jQuery(".blog-nav").offset().top;
        }

// run on page load
    stickyUtility();

我实际上是改了整个脚本,但是要指出如何解决这个问题,这是可以解决它的行!

【讨论】:

    【解决方案2】:

    WordPress 无法将 $ 识别为 jQuery 的缩写,只需添加

    var $ = jQuery

    在顶部

    【讨论】:

    • 我已经尝试用 jQuery 而不是 $ 来编写整个文档,但是没有用...我认为由于某种原因脚本没有加载到网站上
    • 尝试console.log jQuery`,如果没有返回则从cdn添加它;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多