为什么这个jquery slideToggle代码不起作用?

我正在尝试更改展开/折叠按钮的按钮文本。 基本上,用户单击“折叠”并执行slideToggle,当完成slideToggle时,我将按钮文本更改为“Expand”,反之亦然。

下面的代码非常有用,但是如果你快速单击展开/折叠按钮,它就会失去理智并在已经展开时显示“展开”,或者当它已经折叠时显示“折叠”。

任何提示都表示赞赏。

谢谢!

function toggleBox(button,box){if($(box).is(“:hidden”)){$(box).slideToggle(“slow”,function(){$(button).html(“Collapse”) ;}); } else {$(box).slideToggle(“slow”,function(){$(button).html(“Expand”);}); }}

在您的情况下,在动画结束设置文本时进行检查会更安全,如下所示:

function toggleBox( button, box ){ $(box).slideToggle("slow", function(){ $(button).html($(this).is(":hidden") ? "Expand" : "Collapse"); }); } 

目前你正在检查它何时开始,但记住它不是:hidden直到它完成隐藏,所以直到slideUp完成时,它仍然是:visible 🙂

您也可以尝试使用

 :not(:animated)