0

这是关于 .hide() 和 .show() 的事实的问题。这是我的代码的简化版本,但它概括地解释了它。由于它是已经构建的代码,并且我正在对其进行更改和添加,因此我不想返回并将所有内容更改为 .toggle()。

想象一下,您的按钮 1 始终是 .show(),而按钮 2 始终是 .hide()。

是否需要 IF 语句?不使用 IF 语句有什么影响吗?如果您确实使用 IF 语句,会有什么影响吗?

$('#button1').click(function() {
if (!$("#widget").is(':visible')) { 
  $('#widget').show('fast');
}
});
$('#button2').click(function() {
if ($("#widget").is(':visible')) {  
  $('#widget').hide('fast');
}
});

或者直接改变就足够了?::

$('#button1').click(function() {
  $('#widget').show('fast');
});

$('#button2').click(function() {
  $('#widget').hide('fast');
});

有人告诉我,如果不使用上述 IF 语句,可能会出现问题。涉及哪些潜在问题?

4

2 回答 2

2

第二种方法几乎没问题。但是,要处理“快速点击”问题,您可能需要考虑 jQuery 的.stop().clearQueue()函数,因为它们会停止任何以前的动画并继续使用新动画。

就像是:

$('#button1').click(function() {
    $('#widget').stop().show('fast');
});

$('#button2').click(function() {
    $('#widget').stop().hide('fast');
});

这两个函数之间的最大区别在于 clearQueue 不仅仅用于停止动画(回调函数、列表方法等)。在这种情况下,.stop() 应该是您所需要的,尽管您可能希望在启用不同参数的不同浏览器中对其进行测试 (.stop(false, true) ...) 并查看它在每个浏览器中的功能并进行调整根据您的需要。

于 2012-10-23T17:53:04.723 回答
0

第二种方法很好,正如 pst 的回答中提到的那样,它可以正常工作,并且在回答 pst 的问题时,快速单击将没有任何效果,因为它会知道它已被显示并返回 false 以避免任何失败。

于 2012-10-23T17:26:18.230 回答