SlideUp()运行两次

时间:2014-05-04 03:25:55

标签: javascript jquery

我正在使用jQuery创建一个多标签手风琴。 “标题1”面板工作正常,但在“标题2”上,面板运行两次SlideDown()方法。我注意到的另一个小问题是,当我点击按钮/链接和面板向下滑动时,会有一些延迟。

您可以在这里查看jsfiddle以测试并查看问题:

http://jsfiddle.net/3VzTj/1/

jQuery的:

$(document).ready(function() {
  var class_link, class_div, content_div;
  var all_panels = $('article > div.row').not(':first-child');

  $(all_panels).hide();

  $('div.buttons a').click(function() {
    class_link = $(this).attr('class');
    class_div = class_link.match(/[^-]+$/);
    content_div = $(this).closest('article').find('div.' + class_div).parent();

    if ($(content_div).is(':visible')) {
      $(all_panels).slideUp();
    } else {
      $(all_panels).slideUp(function() {
        $(content_div).hide().slideDown();
      });
    }

    return false;
  });
});

HTML:

<section class="grid-container">
  <article>
    <div class="row clearfix">
      <div class="column half">
        <h2>Headline 1</h2>
      </div>
      <div class="column opposite half buttons">
        <a class="button-content1" href="#">Content 1</a>
        <a class="button-content2" href="#">Content 2</a>
      </div>
    </div>

    <div class="row clearfix">
      <div class="column full content1">
        <h1>Content 1</h1>
      </div>
    </div>

    <div class="row clearfix">
      <div class="column full content2">
        <h1>Content 2</h1>
      </div>
    </div>
  </article>


  <article>
    <div class="row clearfix">
      <div class="column half">
        <h2>Headline 2</h2>
      </div>
      <div class="column opposite half buttons">
        <a class="button-content1" href="#">Content 1</a>
        <a class="button-content2" href="#">Content 2</a>
      </div>
    </div>

    <div class="row clearfix">
      <div class="column full content1">
        <h1>Content 1</h1>
      </div>
    </div>

    <div class="row clearfix">
      <div class="column full content2">
        <h1>Content 2</h1>
      </div>
    </div>
  </article>
</section>

1 个答案:

答案 0 :(得分:1)

// replace
$(all_panels).slideUp(function() {
  $(content_div).hide().slideDown();
});

//with
$(all_panels).slideUp().promise().done(function() {
  $(content_div).hide().slideDown();
});