jQuery切换不保持开放

时间:2012-04-19 19:03:46

标签: javascript jquery css click jquery-animate

尝试切换div以扩展和收缩,它基本上是一个菜单,带有subnav。所以我最初将高度设置为48px以隐藏subnav,如果没有JS它仍然看起来不错,我然后指定一个切换来打开和关闭div(在这种情况下设置高度)

它会保持刷新并自动打开div。不希望保持开放,只是展开,提醒,然后再次关闭。

jQuery(document).ready(function($) { 
$('#nav-wrapper').css('height','48px');
  $('#menu-item-18').click(function() {
    var open = false;
    if(isOpen) {
      $('#nav-wrapper').animate({ height: '-=44' }, 0, function() {}); 
      var isOpen = false;
      alert ('not open')
    } else { 
      $('#nav-wrapper').animate({ height: '+=44' }, 0, function() {}); 
      isOpen = !isOpen; 
      alert ('open') 
    };
  });
}); 

可能过于复杂了。我确信也有一个更简单的解决方案。

4 个答案:

答案 0 :(得分:0)

isOpen在本地范围内定义,因此值始终为false。您需要将其移动到点击处理程序之外,然后您只需要isOpen = !isOpen;来切换值。见下文,

  $('#nav-wrapper').css('height','48px');
  var isOpen = false;

  $('#menu-item-18').click(function() {
    isOpen = !isOpen; 
    if(isOpen) {
      $('#nav-wrapper').animate({ height: '-=44' }, 0, function() {}); 
      alert ('not open')
    } else { 
      $('#nav-wrapper').animate({ height: '+=44' }, 0, function() {}); 
      alert ('open') 
    };
  });

答案 1 :(得分:0)

这应该有用(并处理多个元素

$('#menu-item-18').click(function() {
    var isOpen = $(this).is('.open');
    if(isOpen) {
        $('#nav-wrapper').animate({ height: '-=44' }, 0); 
        $(this).removeClass('open');
        alert ('not open');
    } else { 
        $('#nav-wrapper').animate({ height: '+=44' }, 0); 
        $(this).addClass('open');
        alert ('open') ;
    };
});

答案 2 :(得分:0)

如果不使用任何变量,这是我能想到的更简单的方法;

$('#menu-item-18').click(function() {
if($(this).hasClass("active")) {
    $('#nav-wrapper').animate({ height: '-=44' }, 0, function() {}); 
    $(this).removeClass("active");
} else { 
    $('#nav-wrapper').animate({ height: '+=44' }, 0, function() {}); 
    $(this).addClass("active");
}
});

答案 3 :(得分:0)

美好而轻松

$('#menu-item-18').click(function() {
    $('#nav-wrapper').slideToggle(200, //speed in ms
      function() {
        //callback (runs after shown or hidden)
        $(this).is(':visible'); //Returns true if not hidden false if hidden
      }
    );     
});