我写的脚本不起作用,找不到原因

时间:2018-05-11 作者:Chuck

我正在为我的自定义菜单编写菜单脚本。这是一个水平菜单,有四个选项卡。我想让菜单做的是:

单击选项卡时,它会在下面打开一个子菜单,其中包含不同的选项;

再次单击同一选项卡时,隐藏子菜单;

菜单和子菜单使用网格CSS进行布局,因为选项卡1显示一个单元格,其中包含文本和一个链接(使用整个宽度);选项卡二显示四个单元格;选项卡三显示两个使用50%宽度的单元格,以此类推。

我似乎不明白为什么我的脚本不起作用。也许jQuery会更好,我不知道,我对这一切都不熟悉。此外,也许有一种更简单的方法可以使用WP来实现这一点,但同样,我还没有找到关于如何实现这一点的教程/

谁能帮帮我吗?谢谢

代码小提琴:JSfiddle

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

你看过debugging javascript代码?当你拉小提琴时,它会显示出一堆错误。

例如

Uncaught ReferenceError: openDisplay is not defined
at HTMLButtonElement.onclick ((index):181)
还有这一个,一旦你修复了上面的一个

Uncaught TypeError: document.getElementsById is not a function
at openDisplay ((index):164)
这是因为没有名为getElementsById的函数,因为所有元素都应该只有唯一的id。所以应该是这样getElementById

Jquery当然是一个更好的主意(对我来说),因为Jquery选择器易于使用。

    /* Click Handlers */
$(\'#menu-aquo\').on(\'click\', function(e) {
  e.preventDefault();
  openDisplay(e, \'aquo\');
});

$(\'#menu-categories\').on(\'click\', function(e) {
  e.preventDefault();
  openDisplay(e, \'categories\');

});

$(\'#menu-involve\').on(\'click\', function(e) {
  e.preventDefault();
  openDisplay(e, \'involve\');
});

$(\'#menu-search\').on(\'click\', function(e) {
  e.preventDefault();
  openDisplay(e, \'search\');
});

function openDisplay(evt, tabName) {
  //Declare all variables
  var i, target, menutab, submenu;

  // Remove \'active\' class from all menutabs
  $(\'.menutab\').removeClass("active");
  // Add active to the current menutab
  evt.currentTarget.classList.toggle("active");

  target = "div." + tabName;

  // Select all except currently clicked submenu and hide them
  toHide = $(\'.submenu:not(.\' + tabName + \'.hidden)\')
    .each(function() {

      if (!$(this).hasClass(tabName)) {
        $(this).addClass("hidden");
      }

    });
    //Select all current submenu and hide or show them
  submenu = $(target)
    .each(function() {
      if ($(this).hasClass("hidden")) {
        $(this).removeClass("hidden");
      } else {
        $(this).addClass("hidden");
      }

    });

}
Here is a working jquery JsFiddle with comments.

还有我的两分钱:我会把菜单安排得稍微不同一点。

例如,而不是

<div id="submenu">
  <div class="submenu aquo " id="sub-aquo">
    <p>some text with one <a>link</a></p>
  </div>
  <div class="submenu categories hidden" id="zebrology">
    <img src="<?php echo get_template_directory_uri(); ?>/img/zebra.png" />Zebrology
  </div>
  <div class="submenu categories hidden" id="clips">
    <img src="<?php echo get_template_directory_uri(); ?>/img/clip.png" />Clips
  </div>
</div>
我会将每个子菜单分别放在div 所以我把hidden 在主要方面。

实例

<div id="submenu">
    <div class="aquo hidden">
       <div class="submenu" id="sub-aquo">
          <p>some text with one <a>link</a></p>
       </div>
    </div>
    <div class="categories hidden">
       <div class="submenu" id="zebrology">
          <img src="<?php echo get_template_directory_uri(); ?>/img/zebra.png" />Zebrology
       </div>
       <div class="submenu" id="clips">
           <img src="<?php echo get_template_directory_uri(); ?>/img/clip.png" />Clips
      </div>
    </div>
</div>
但每个程序员都有自己的风格。所以没什么大不了的。

至于WordPress,它已经提供了一种构建和组织菜单的简单方法。你所要做的就是修改css,使它看起来像你想要的样子。

检查手动设置WordPress菜单样式的方法2this 辅导的

基本上WordPress向菜单添加了一些类,您可以使用这些类修改菜单的外观。

// container class
#header .primary-menu{} 

// container class first unordered list
#header .primary-menu ul {} 

//unordered list within an unordered list
#header .primary-menu ul ul {} 

 // each navigation item
#header .primary-menu li {}

// each navigation item anchor
#header .primary-menu li a {} 

// unordered list if there is drop down items
#header .primary-menu li ul {} 

// each drop down navigation item
#header .primary-menu li li {} 

// each drap down navigation item anchor
#header .primary-menu li li a {} 

结束

相关推荐

当在PHP/JavaScript中的Referrer不起作用时,如何处理导航中的倒退?

所讨论的网站是:https://liquidchurch.com/messages/messages-app-view/单击此页面上的任何系列图像,您将进入该系列的页面:https://liquidchurch.com/messages/christmas-eve-series/messages-app-view/如果单击“返回”,很好,我们将返回到第一个链接。相反,我们将通过单击其中一个消息图像/链接进入单个消息,并在以下位置结束:https://liquidchurch.com/messages/ch