Javascript 如果..,则在jQuery中检查是否打开了slideToggle()

Javascript 如果..,则在jQuery中检查是否打开了slideToggle(),javascript,jquery,Javascript,Jquery,我使用“slideToggle”在一个站点上打开几个div,并希望确保在打开另一个div之前关闭所有div。有没有办法运行if..then以确保在打开另一个div之前切换的div没有打开 这是我的剧本 <script type="text/javascript"> $(function() { $("a#toggle").click(function() { $("#contact").slideToggle(500); retu

我使用“slideToggle”在一个站点上打开几个div,并希望确保在打开另一个div之前关闭所有div。有没有办法运行if..then以确保在打开另一个div之前切换的div没有打开

这是我的剧本

<script type="text/javascript">
$(function()
  {
     $("a#toggle").click(function() {
          $("#contact").slideToggle(500);
          return false;
 });
 $("a#toggle_about").click(function(){
          $("#about").slideToggle(500);
          return false;
     });
  });
</script> 
谢谢

------编辑------ 这似乎工作正常,我可以通过将速度设置为500或0来控制过渡。这似乎是一个简单的if..then的很多代码

感谢您的建议和可能的解决方案

<script type="text/javascript">
$(function()
  {
     $("a#toggle").click(function(){
         if ($("#about").is(':hidden')){
            $("#contact").slideToggle(500);
    return false;
     }else{
            $("#about").slideToggle(500);
            $("#contact").slideToggle(500);
    return false;
         }
 });
 $("a#toggle_about").click(function(){
    if ($("#contact").is(':hidden')){
              $("#about").slideToggle(500);
              return false;
    }else{
              $("#contact").slideToggle(500);
              $("#about").slideToggle(500);
      return false;
        }
     });
  });
</script> 

$(函数()
{
$(“a切换”)。单击(函数(){
如果($(“#about”).is(':hidden')){
$(“#联系人”)。滑动切换(500);
返回false;
}否则{
$(#about”)。滑动切换(500);
$(“#联系人”)。滑动切换(500);
返回false;
}
});
$(“切换”)。单击(函数(){
如果($(“#contact”).is(':hidden')){
$(#about”)。滑动切换(500);
返回false;
}否则{
$(“#联系人”)。滑动切换(500);
$(#about”)。滑动切换(500);
返回false;
}
});
});

您可以实现一个helper函数,用某个类折叠任何可见元素,然后在每次切换div时调用该函数

标记:

<div id="contact" class="toggle-content">blah, blah...</div>

您还可以查看jQueryUIAccordion,它的默认行为实现了同样的功能

更新:例如添加了Fiddle链接


有几种方法可以解决这个问题

无论何时,当您为实现效果而使用tween时,如果您不想使用tween,那么您将希望跟踪tween的状态

通常,您可能有一个触发器/切换器和一个目标。我喜欢使用闭包来完成状态跟踪。我可以用这样的方法:

$(function () {
    // closures
    var $togglers = $('[selector][, selector]');
    var $target = $('[selector]');
    $target.tweening = false;
    var tweenStop = function () {
        $target.tweening = false;
    };
    var togglerClick = function () {
        if (!$target.tweening) {
            $target.tweening = true;
            $target.slideToggle(500, tweenStop);
        }
    };
    // handle the event
    $togglers.click(togglerClick);
});

如果在html中添加适当的类,并将href更改为指向需要打开的div,则可以显著简化代码

<ul>
    <li><a href="#contact" class="toggler">Contact Me</a></li>
    <li><a href="#about" class="toggler">About Me</a></li>
</ul>
<div id="contact" class="toggleable">blah, blah...</div>
<div id="about" class="toggleable">blah, blah...</div>
最终结果是,当您单击“联系我”时,“关于”将在打开时隐藏,而“联系”将在隐藏时显示,或在显示时隐藏


您可以使用:visible选择器。您可以使用show()和hide()来代替。然后,您可以在对单个元素运行show()之前隐藏()所有元素。即使使用show()/hide(),我仍然需要一种方法来检查div是否已打开。@Mgfranz在您的问题中说,您需要确保在打开另一个div之前关闭所有div。这并不要求您知道div是否打开。还有其他原因吗?@MiniRagnarok,使用slideToggle(),它会使被调用的div保持打开状态,直到再次单击href,我想在调用另一个div之前验证一个div是否已关闭。手风琴可以很好地工作,因为ui已经加载。;-)
<div id="contact" class="toggle-content">blah, blah...</div>
function hideToggleContent() {
    $('.toggle-content:visible').slideUp( 500 );
}

$(function() {
    $("#toggle").click( function() { 
        var isVisible = $("#contact").is(':visible');
        hideToggleContent();

        if( isVisible ) {
            return false;
        }

        $("#contact").slideDown( 500 );
        return false;
    });
    $("#toggle_about").click( function() {
        var isVisible = $("#about").is(':visible');
        hideToggleContent();

        if( isVisible ) {
            return false;
        }

        $("#about").slideDown( 500 );
        return false;
    });
});
$(function () {
    // closures
    var $togglers = $('[selector][, selector]');
    var $target = $('[selector]');
    $target.tweening = false;
    var tweenStop = function () {
        $target.tweening = false;
    };
    var togglerClick = function () {
        if (!$target.tweening) {
            $target.tweening = true;
            $target.slideToggle(500, tweenStop);
        }
    };
    // handle the event
    $togglers.click(togglerClick);
});
<ul>
    <li><a href="#contact" class="toggler">Contact Me</a></li>
    <li><a href="#about" class="toggler">About Me</a></li>
</ul>
<div id="contact" class="toggleable">blah, blah...</div>
<div id="about" class="toggleable">blah, blah...</div>
$(".toggler").click(function (e) {
    e.preventDefault();
    var target = $(this).attr("href");
    $(".toggleable").not(target).hide();
    $(target).slideToggle();
});