javascript - Jquery slideUp 在第一次点击时不起作用

标签 javascript jquery html css

我已经为自己创建了一个 Accordion 菜单,但是我遇到了一个问题。当我第一次点击“li”元素时,slideUp 不起作用。

$(document).ready(function() {
  $('#menu ul li a').click(function(e) {
    e.preventDefault();

    if ($(this).parent().hasClass('active')) {
      if ($(this).next().is(':visible')) {
        $(this).next().slideUp();
        $(this).parent().removeClass('active');
      } else {
        $(this).next().slideDown();
      }
    } else {
      $('#menu ul li').each(function() {
        $(this).removeClass('active');
      });
      $('#menu ul li ul').slideUp();
      $(this).next().slideDown();
      $(this).parent().addClass('active');
    }
  });
});
#menu,
#menu ul,
#menu li,
#menu a {
  margin: 0;
  padding: 0;
  border: 0;
  list-style: none;
  font-weight: normal;
  text-decoration: none;
  line-height: 1;
  font-family: 'Open Sans', sans-serif;
  font-size: 14px;
  position: relative;
}

#menu a {
  line-height: 1.3;
}

#menu > ul > li {
  margin: 0;
}

#menu > ul > li:last-child {
  margin: 0;
}

#menu > ul > li > a {
  font-size: 15px;
  display: block;
  color: #ffffff;
  text-shadow: 0 1px 1px #000;
  padding: 5px;
}

#menu > ul > li > a > span {
  display: block;
  padding: 6px 10px;
  font-weight: bold;
}

#menu > ul > li > a:hover {
  text-decoration: none;
  background: #0074a2 url('../img/icons/menuActive.png') no-repeat 101%;
}

#menu > ul > li.active {
  border-bottom: none;
}

#menu > ul > li.active > a {
  background: #0074a2 url('../img/icons/menuActive.png') no-repeat 101%;
  color: #fff;
  text-shadow: 0 1px 1px #000;
}


/* Sub menu */

#menu ul ul {
  padding: 5px 12px;
  display: none;
  background: #333333;
}

#menu ul ul li {
  padding: 3px 0;
}

#menu ul ul a {
  display: block;
  color: #fff;
  font-size: 13px;
  font-weight: bold;
  padding: 10px 0;
}

#menu ul ul a:hover {
  color: #0074a2;
}

#menu ul li.active ul {
  display: block;
}

#menu ul li img {
  float: left;
  margin: -2px 4px 0 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="menu">
  <ul>
    <li class='has-sub active'><a href='#'><span>AAA</span></a>
      <ul>
        <li><a href='#'><span>AAA_1</span></a></li>
        <li><a href='#'><span>AAA_2</span></a></li>
        <li><a href='#'><span>AAA_3</span></a></li>
      </ul>
    </li>
    <li class='has-sub'><a href='#'><span>BBB</span></a>
      <ul>
        <li><a href='#'><span>BBB_1</span></a></li>
        <li><a href='#'><span>BBB_2</span></a></li>
      </ul>
    </li>
    <li class='has-sub last'><a href='#'><span>CCC</span></a>
      <ul>
        <li><a href='#'><span>CCC_1</span></a></li>
        <li><a href='#'><span>CCC_2</span></a></li>
        <li><a href='#'><span>CCC_3</span></a></li>
        <li><a href='#'><span>CCC_4</span></a></li>
      </ul>
    </li>
  </ul>
</div>

这是我在 jsfiddle 中输入的简单代码。

jsfiddle

谁能告诉我错误在哪里以及如何解决?

谢谢!

最佳答案

html 的状态是这样的:
1. 从开始:<ul>
2. 点击一次后:<ul style="display: none;">
3、再次点击后:<ul style="display: block;">

现在我在 css 方面不是很好,但是如果您跟踪按下它时发生的动态 css,那么您就会知道您的样式缺少哪些属性。

关于javascript - Jquery slideUp 在第一次点击时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33723185/

相关文章:

javascript - 如何制作进度条

html - CSS 过渡干扰动画

javascript - 切换选项卡让 CSS 变得疯狂

javascript - 如果包含特定单词,则从数组中返回匹配项

javascript - 最佳实践 - ASP.NET 合并所有 JavaScript 输出

Javascript 闭包行为在运行时很奇怪

javascript - 自动选择当前类 - 导航菜单

javascript - 带有 HTML chop 数据的可调整表

javascript - scrollmagic 不响应触发元素

javascript - 两种样式在一个 if 条件下在 javascript 中变化