jQuery停止函数运行两次

时间:2016-04-07 08:30:52

标签: javascript jquery

我正在使用slideUp / down显示和隐藏内容并将其写入,以便在打开另一个内容时关闭任何可见内容。这有效,直到我尝试通过点击它来关闭内容,它会立即再次打开它。

HTML

<ul class="contents">
   <li>
      while($results->fetch()){
          <div class="details">text</div>
          <div class="more_details">more text</div>
      }
   </li>
</ul>

jQuery

$("#results").on("click", ".details", function() {
    $(".open").slideUp(600, function() {
        $(".open").css("display", "none").removeClass("open");
    });

    if ($(this).hasClass("open")) {
        $(this).slideUp( 600, function() {
            $(this).css("display", "none").removeClass("open");
        });
    } else {
        $(this).next(".more_details").slideDown(600, function() {
            $(this).css("display", "show").addClass("open");
        });
    }   
});

1 个答案:

答案 0 :(得分:1)

在下拉代码中,您正在使用下一个同级more_details,您在处理this元素的上滑代码中。

$("#results").on("click", ".details", function() {
  var $details = $(this).next(".more_details");
  $details.slideToggle(600, function() {
    $details.toggleClass("open");
  });
  $(".more_details.open").not($details).slideUp(600, function() {
    $(this).removeClass("open");
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="results">
  <div class="details">details</div>
  <div class="more_details">more_details</div>
  <div class="details">details</div>
  <div class="more_details">more_details</div>
  <div class="details">details</div>
  <div class="more_details">more_details</div>
  <div class="details">details</div>
  <div class="more_details">more_details</div>
</div>