Jquery使用if for css单击显示隐藏按钮

Posted

技术标签:

【中文标题】Jquery使用if for css单击显示隐藏按钮【英文标题】:Jquery Click show hide button using if for css 【发布时间】:2013-03-01 09:57:08 【问题描述】:

我一直在尝试制作一个按钮来切换另一个 div 的可见性...这是我正在使用的 javascript

$(document).ready(function () 
    var navwidth = $('div#navigationpanel').css('max-width');

    $('div#showhidenav').click(function () 
        if ( navwidth == "0px" ) 
          $('div#navigationpanel').css('max-width', '850px');
         
        else if ( navwidth == "850px" ) 
          $('div#navigationpanel').css('max-width', '0px');
        
    );
);

它确实有效,至少在第一次点击时,但第二次点击按钮时,它应该做相反的事情,再次显示或隐藏 div。但是什么也没发生。

所以要明确一点,它适用于第一次点击,但不适用于任何下一次点击

【问题讨论】:

为什么不直接使用 jquery .toggle() @JacobTomlinson 因为我需要滑动过渡 .toggle() 有过渡吗? 【参考方案1】:

那是因为您使用的是存储值(在 DOMReady 上)并且您没有更新它,因此仅执行条件块,css 方法接受一个函数,您可以使用此函数:

$(document).ready(function () 
    $('#showhidenav').click(function () 
        $('#navigationpanel').css('max-width', function(i, m)
            return m === '850px' ? '0px' : '850px';  
        )
    );
);

【讨论】:

【参考方案2】:

使用.on()

$('div#showhidenav').on('click',function () 
    var navwidth = $('div#navigationpanel').css('max-width');
    if ( navwidth == "0px" ) 
      $('div#navigationpanel').css('max-width', '850px');
     
    else if ( navwidth == "850px" ) 
      $('div#navigationpanel').css('max-width', '0px');
    
);

navwidth 放入点击事件调用中。

【讨论】:

【参考方案3】:
    不要使用tag#id 选择器,只使用#id,前者会更慢 缓存您的目标对象 使用.on() 监听事件 使用.slideToggle()

CSS:

#navigationpanel 
    max-width: 850px;

JS

$(document).ready(function () 
    var $nav = $('#navigationpanel');

    $('#showhidenav').on('click', function ()  $nav.slideToggle(); );
);

【讨论】:

【参考方案4】:

您在页面加载时设置变量,而不是在修改 div 时更新它。要解决此问题,您可以检查值而不是使用变量

$(document).ready(function () 
    $('div#showhidenav').click(function () 
        if ( $('div#navigationpanel').css('max-width') == "0px" ) 
          $('div#navigationpanel').css('max-width', '850px');
         
        else if ( $('div#navigationpanel').css('max-width') == "850px" ) 
          $('div#navigationpanel').css('max-width', '0px');
        
    );
);

但如果你只是想显示和隐藏 div,jQuery 有一个内置函数称为.toggle()

$(document).ready(function () 
    $('#showhidenav').click(function () 
          $('#navigationpanel').toggle();
    );
);

对于过渡,您可以指定持续时间和缓动。来自 jquery documentation

.toggle( 持续时间 [, 缓动 ] [, 完成 ] )

duration (default: 400)
Type: Number or String
A string or number determining how long the animation will run.

easing (default: swing)
Type: String
A string indicating which easing function to use for the transition.

complete
Type: Function()
A function to call once the animation is complete.

【讨论】:

以上是关于Jquery使用if for css单击显示隐藏按钮的主要内容,如果未能解决你的问题,请参考以下文章

在循环php jquery中隐藏和显示内容

怎样判断jQuery 元素是不是显示与隐藏

怎样判断jQuery 元素是不是显示与隐藏

如何使用jQuery和CSS隐藏元素?

jQuery 元素是不是显示与隐藏的判断

Onclick 显示/隐藏仅 div 且不带 href 的 css。没有jQuery