【问题标题】:jQuery implementation - not all scripts work welljQuery 实现 - 并非所有脚本都能正常工作
【发布时间】:2015-06-12 08:35:16
【问题描述】:

我基于 Wordpress 创建了一个网站,我的所有脚本都使用 jQuery 2.1.4。

问题是,当我在<header> 部分中实现 jQuery 时,“滚动到顶部”可以工作,但导航 (Bootstrap navwalker) 不能。当我在functions.php 中实现 jQuery 时,导航可以正常工作,但“滚动到顶部”却不行!

我尝试使用另一个 jQuery 版本滚动到顶部 noConflict,但导航不起作用。

我也尝试在 <body><?php wp_head(); ?> 之后移动我的所有脚本,但它也不起作用。

当我在<head> 部分和functions.php(仅用于测试)中实现 jQuery 时,导航不起作用。

代码(像这样导航有效,滚动到顶部无效):

 <head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?php bloginfo('name'); ?> <?php wp_title(); ?></title>


<!-- scroll to top-->
 <script>   
$(document).ready(function(){

    $(window).scroll(function(){
        if ($(this).scrollTop() > 100) {
            $('.scrollToTop').fadeIn();
        } else {
            $('.scrollToTop').fadeOut();
        }
    });

    $('.scrollToTop').click(function(){
        $('html, body').animate({scrollTop : 0},800);
        return false;
    });

});
</script>    


 <?php wp_head(); ?>    

functions.php

<?php
/* Theme setup */
add_action( 'after_setup_theme', 'wpt_setup' );
    if ( ! function_exists( 'wpt_setup' ) ):
        function wpt_setup() {  
            register_nav_menu( 'primary', __( 'Primary navigation', 'wptuts' ) );
        } endif;


add_action( 'wp_enqueue_scripts', 'add_my_script' );
function add_my_script() {
    wp_enqueue_script( 'jquery-2.1.4.min.js', get_template_directory_uri() . '/js/jquery-2.1.4.min.js');
}
add_action( 'wp_enqueue_scripts', 'add_my_script' );



function wpt_register_js() { 
    wp_register_script('jquery.bootstrap.min', get_template_directory_uri() . '/js/bootstrap.min.js', 'jquery-2.1.4.min.js');
    wp_enqueue_script('jquery.bootstrap.min');   
} 

add_action( 'init', 'wpt_register_js' );
function wpt_register_css() {
    wp_register_style( 'bootstrap.min', get_template_directory_uri() . '/css/bootstrap.min.css' );
    wp_enqueue_style( 'bootstrap.min' );
    wp_enqueue_style( 'my_template', get_template_directory_uri() . '/style.css' );
}
add_action( 'wp_enqueue_scripts', 'wpt_register_css' );        

// Register custom navigation walker
    require_once('wp_bootstrap_navwalker.php');
?>

导航代码

  <nav class="navbar navbar-default" role="navigation"> 
  <!-- Brand and toggle get grouped for better mobile display --> 
    <div class="navbar-header"> 
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse"> 
        <span class="sr-only">Toggle navigation</span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
      </button>  
    </div> 
    <!-- Collect the nav links, forms, and other content for toggling --> 
    <div class="collapse navbar-collapse navbar-ex1-collapse"> 
      <?php /* Primary navigation */
      wp_nav_menu( array(
           'menu' => 'Menu 1',
        'depth' => 2,
        'container' => false,
        'menu_class' => 'nav navbar-nav',
        //Process nav menu using our custom nav walker
        'walker' => new wp_bootstrap_navwalker())
        );
        ?>
    </div>
  </nav>

&lt;script&gt;标签的输出顺序:

<script type='text/javascript' src='.../wp-content/themes/tyszka/js/bootstrap.min.js?ver=4.2.2'></script>
<script type='text/javascript' src='.../wp-includes/js/jquery/jquery.js?ver=1.11.2'></script>
<script type='text/javascript' src='.../wp-includes/js/jquery/jquery-migrate.min.js?ver=1.2.1'></script>
<!-- some plugin stuff here-->

<link rel="EditURI" type="application/rsd+xml" title="RSD" href=".../xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href=".../wp-includes/wlwmanifest.xml" /> 
<meta name="generator" content="WordPress 4.2.2" />

    <!-- scroll to top-->
     <script>   
    $(document).ready(function(){

        //Check to see if the window is top if not then display button
        $(window).scroll(function(){
            if ($(this).scrollTop() > 100) {
                $('.scrollToTop').fadeIn();
            } else {
                $('.scrollToTop').fadeOut();
            }
        });

        //Click event to scroll to top
        $('.scrollToTop').click(function(){
            $('html, body').animate({scrollTop : 0},800);
            return false;
        });

    });
    </script>    


  </head>

【问题讨论】:

  • functions.php 包含在哪里?导航代码是什么样的?是否可以在JsFiddle 中复制问题?
  • functions.php 自动包含在 WordPress 中,我不必在 &lt;head&gt; 部分实现它。我认为由于这个functions.php和navwalker,在JsFiddle中复制它会相当困难......我已经将导航代码添加到问题中
  • 在这两种情况下,您是否在控制台中遇到任何错误?
  • 严格来说 PHP 处理 HTML/CSS/Javascript。当你加载页面时,你会得到输出,你可以用它来创建一个 JsFiddle。无论如何,我认为我们需要查看&lt;script&gt; 标签的输出顺序...
  • 我已经添加了输出

标签: php jquery wordpress twitter-bootstrap-3 wordpress-theming


【解决方案1】:

保持代码不变!

只需稍作改动即可。 将&lt;?php wp_head(); ?&gt; 放在滚动脚本之前。

不要包含任何额外的 jQuery 文件。我觉得这应该可以解决问题!

让我们知道!

编辑:

浏览了您的网站,这就是我想到的。 1. Bootstrap js 在 jQuery 之前加载 2.代码中有2个jquery文件

所以我不是 Wordpress 方面的专家,但我发现了一些东西, 有函数wp_register_scriptwp_enqueue_script 您在上面的代码中已经使用了这两个函数,但是在这些函数中,还有第三个参数,它接受数组并用于传递依赖项。 Link 1

如果您在数组中传递 jquery,我认为您的问题应该得到解决! 希望这会有所帮助!

【讨论】:

  • 感谢您的评论。但是,正如我所说,我已经尝试过了,但它不起作用。
  • 当您编写代码时(如问题中所述),您是否在控制台中遇到任何错误?
  • 是的,我愿意。 Uncaught Error: Bootstrap's JavaScript requires jQuery 75 Uncaught TypeError: undefined is not a function(这里开始我的滚动到顶部)
  • 但是 bootrap 有效,所以我不知道为什么会出现错误。并且 *.js 文件的顺序也是正确的。
  • 刚刚看到您粘贴的输出。奇怪的是jquery-2.1.4.min.js 没有进来
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多