折叠式菜单的 JavaScript 代码

标签 javascript jquery

(终于解决了)当每个人都告诉你代码很好,甚至演示了它,但它在你的地方不起作用时,那么你可能犯了一个小错误。我的顺序是 jQuery、menumaker 和最后我的本地脚本应该被调用的顺序(就是上面的顺序),而不是任何其他顺序。

<script src="/scripts/jquery-1.12.0.min.js"></script>
<script src="https://s3.amazonaws.com/menumaker/menumaker.min.js"></script>
<script src="/scripts/01_MainMenu.js"></script>

这个错误是由 Google Chrome 调试器指出的,我直到现在才使用它,但从现在开始肯定会使用它。

(更新)感谢您的所有回答。对 jQuery 的引用存在于 jQuery 的本地副本中: <script src="/scripts/jquery-1.12.0.min.js"></script> 我还尝试了建议链接 gavgrif 的脚本,但不幸的是,它仍然无法正常工作。

但是我在 Mozilla Firefox 调试器中收到以下错误:

消息:jQuery 未定义。

Firefox Debugger error message

错误消息引用脚本中的最后一行 (26),即包含“(jQuery)”的行。

(原帖)

我从 CSS MenuMaker 收到了这个脚本,它应该制作一个带有子菜单展开/收缩的 Accordion 菜单。但我不明白最后的 (jQuery) 位,以及为什么整个脚本位于圆括号之间。我是一名 JavaScript 新手。

显然,该脚本不起作用。

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

    $('#main_menu ul ul li:odd').addClass('odd');
    $('#main_menu ul ul li:even').addClass('even');
    $('#main_menu > ul > li > a').click(function() {
      $('#main_menu li').removeClass('active');
      $(this).closest('li').addClass('active'); 
      var checkElement = $(this).next();
      if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
        $(this).closest('li').removeClass('active');
        checkElement.slideUp('normal');
      }
      if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
        $('#main_menu ul ul:visible').slideUp('normal');
        checkElement.slideDown('normal');
      }
      if($(this).closest('li').find('ul').children().length == 0) {
        return true;
      } else {
        return false;   
      }     
    });

  });
})(jQuery);

HTML:

   <div id="main_menu">
   <ul>
      <li class="active"><a href="../Main.php">Home</a></li>
      <li><a href="/pages/04_Taxonomy.php">Taxonomy</a></li>
      <li><a href="/pages/01_PlantList.php">Virtual Herbarium</a></li>
      <li><a href="/pages/03_PlantData.php">Data Repository</a></li>
      <li class="has-sub"><a href="#">Sources</a>
         <ul>
            <li><a href="/pages/072_Surse_Books.php">Books</a></li>
            <li><a href="/pages/073_Surse_Journals.php">Journals</a></li>
         </ul>
      </li>
      <li><a href="#">Habitats</a></li>
      <li><a href="#">Endangered species</a></li>
      <li><a href="#">Papers</a></li>
   </ul>
   </div>

对应的CSS相当长。如果需要的话我会发布,但我个人不这么认为。

最佳答案

关于脚本不起作用 - 我刚刚将您的代码复制到此代码片段中来回答它并且它起作用 - 单击“源”链接将按预期打开和关闭子菜单。如果它不适合你,那么我怀疑你没有在文档的头部包含 jquery 库。

尝试添加

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

进入头部,看看是否有效。对于论坛的其余部分 - 是的,这应该是一条评论 - 但我想通过代码片段演示代码可以通过添加代码片段来工作:)

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

    $('#main_menu ul ul li:odd').addClass('odd');
    $('#main_menu ul ul li:even').addClass('even');
    $('#main_menu > ul > li > a').click(function() {
      $('#main_menu li').removeClass('active');
      $(this).closest('li').addClass('active'); 
      var checkElement = $(this).next();
      if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
        $(this).closest('li').removeClass('active');
        checkElement.slideUp('normal');
      }
      if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
        $('#main_menu ul ul:visible').slideUp('normal');
        checkElement.slideDown('normal');
      }
      if($(this).closest('li').find('ul').children().length == 0) {
        return true;
      } else {
        return false;   
      }     
    });

  });
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <div id="main_menu">
   <ul>
      <li class="active"><a href="../Main.php">Home</a></li>
      <li><a href="/pages/04_Taxonomy.php">Taxonomy</a></li>
      <li><a href="/pages/01_PlantList.php">Virtual Herbarium</a></li>
      <li><a href="/pages/03_PlantData.php">Data Repository</a></li>
      <li class="has-sub"><a href="#">Sources</a>
         <ul>
            <li><a href="/pages/072_Surse_Books.php">Books</a></li>
            <li><a href="/pages/073_Surse_Journals.php">Journals</a></li>
         </ul>
      </li>
      <li><a href="#">Habitats</a></li>
      <li><a href="#">Endangered species</a></li>
      <li><a href="#">Papers</a></li>
   </ul>
   </div>

关于折叠式菜单的 JavaScript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39297016/

相关文章:

javascript - React.jsx 与 React.js 作为组件创建的文件扩展名

javascript - jQuery 将参数传递给 $.get() 回调函数

jquery - 如何禁用《基础 4》中的轨道计时器?

javascript - 使用 JQuery 的响应式设计

javascript - 如何在没有 ID 或名称的情况下更改特定的 href?

Javascript:在本地存储中存储函数

javascript - iframe 中包含的 JS 具有顶部框架窗口的上下文

javascript - ember.js:扩展 Ember.TextField 并仅更新输入键上的 value 属性

javascript - 考虑到元素是 "**",如何全局交换数组字符串

javascript - 如何从php循环获取值到div