jQuery停止函数运行两次

jQuery stop function running twice

本文关键字:两次 运行 函数 jQuery      更新时间:2024-02-23

我使用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");
        });
    }   
});

在向下的代码中,您正在处理下一个同级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>