将true / false传递给slideToggle()

时间:2011-11-29 15:05:55

标签: jquery

在jQuery中,我知道我们可以将truefalse值传递给元素的toggle可见性。我无法slideToggle做同样的事情。有什么帮助吗?

例如,而不是:

if (true)
    $('something').slideDown();
else
    $('something').slideUp();

我真的想做类似的事情:

$('something').toggle(myBoolValue);

但我想用 slideToggle

来做

my example of jsfiddle了解我要做的事情。

这可能吗?

5 个答案:

答案 0 :(得分:16)

slideToggle可选地需要2个参数durationcallback,因此传递true / false以显示/隐藏将不起作用。您可能必须编写自己的插件来实现此逻辑。像这样的东西

$.fn.mySllideToggle = function(show){
   if(show){
      $(this).slideDown();
   }
   else{
      $(this).slideUp();
   }
}

答案 1 :(得分:5)

更新:显然有一个增强请求,为了保持一致性而添加此功能,但他们投了反对票:Ticket #10491

答案 2 :(得分:3)

这很简单:

$.fn.slideToggleBool = function(bool, options) {
  return bool? $(this).slideDown(options) : $(this).slideUp(options);
}

享受!

答案 3 :(得分:1)

它可以像这样被填充:

;(function($) {
    var slideToggleOrig = $.fn.slideToggle;
    $.fn.slideToggle = function(display) {
        var fn,
            args = arguments;
        if ('boolean' != typeof display) {
            fn = slideToggleOrig;
        }
        else {
            if (display) {
                fn = this.slideDown;
            }
            else {
                fn = this.slideUp;
            }
            args = Array.prototype.slice.call(args, 1);// hide the extra arg from official functions
        }
        return fn.apply(this, args);
    };
})(jQuery);

这可以通过检测slideToggle的第一个参数是否为布尔值(不仅仅是真/假),如果是,则替换具有兼容签名的up和down函数。这意味着您可以使用任何现有签名,但可以在开头添加一个额外的参数。它也可以正确链接,而无需修改堆栈或创建新对象。

答案 4 :(得分:-4)