Jquery 设置超时禁用

Jquery 设置超时禁用,jquery,settimeout,slidetoggle,Jquery,Settimeout,Slidetoggle,我有个问题。我有这个菜单,点击下拉菜单,我希望它回到5秒后,如果没有发生任何事情。我走了这么远。但有一个小问题,当我点击它返回时,它在5秒后出现,没有询问。它是否可以检查它是否仍然可见,然后返回,如果没有,请保持冷静并继续 代码如下: $(document).ready(function () { $('#aktivs-share').click(function() { $('#share').slideToggle('slow', function() { }); s

我有个问题。我有这个菜单,点击下拉菜单,我希望它回到5秒后,如果没有发生任何事情。我走了这么远。但有一个小问题,当我点击它返回时,它在5秒后出现,没有询问。它是否可以检查它是否仍然可见,然后返回,如果没有,请保持冷静并继续

代码如下:

$(document).ready(function () {
  $('#aktivs-share').click(function() {     
  $('#share').slideToggle('slow', function() {  });
  setTimeout(function() {
  $('#share').slideToggle('slow', function() {  });
}, 5000);
});
 $('#aktivs').click(function() {
  $('#valodas').slideToggle('slow', function() {  });
  setTimeout(function() {
  $('#valodas').slideToggle('slow', function() {  });     
 }, 5000); 
});
});

记住
setTimeout
的返回值,它是一个句柄,您可以通过它来取消它

在您的情况下,由于您想用不止一件事情来完成它,所以最好将计时器句柄实际存储在元素上,via


您可以考虑编写一个插件方法来实现这一点,以避免复制逻辑。代码>滑动开关关闭或其他东西。:-)

记住
setTimeout
的返回值,它是一个句柄,您可以通过它来取消它

在您的情况下,由于您想用不止一件事情来完成它,所以最好将计时器句柄实际存储在元素上,via


您可以考虑编写一个插件方法来实现这一点,以避免复制逻辑。代码>滑动开关关闭或其他东西。:-)

您需要跟踪菜单所处的状态,然后在菜单关闭时使用clearTimeout()清除超时

(代码未经测试,但希望您能理解)

var shareOpen=false; var shareTimeoutHandle=未定义; $(“#aktivs共享”)。单击(函数(){ $('#share').slideToggle('slow',function(){}); //检查当前状态,如果已打开,则关闭并重置 if(shareOpen)clearTimeout(shareTimeoutHandle); 否则{ shareTimeoutHandle=setTimeout(函数(){ $('#share').slideToggle('slow',function(){}); }, 5000); } //将新状态设置为相反的状态 shareOpen=!shareOpen; });
您需要跟踪菜单所处的状态,然后在菜单关闭时使用clearTimeout()清除超时

(代码未经测试,但希望您能理解)

var shareOpen=false; var shareTimeoutHandle=未定义; $(“#aktivs共享”)。单击(函数(){ $('#share').slideToggle('slow',function(){}); //检查当前状态,如果已打开,则关闭并重置 if(shareOpen)clearTimeout(shareTimeoutHandle); 否则{ shareTimeoutHandle=setTimeout(函数(){ $('#share').slideToggle('slow',function(){}); }, 5000); } //将新状态设置为相反的状态 shareOpen=!shareOpen; });
尝试
clearTimeout()
您可以设置一个变量,然后在回调函数中清除它$(#valodas').slideToggle('slow',function(){});尝试
clearTimeout()
您可以设置一个变量,然后在回调函数中清除它$(#valodas').slideToggle('slow',function(){})+以1为例。请注意,您可以将您的
shareOpen
shareTimeoutHandle
组合在一起
0
不是有效的计时器句柄,因此只需在
shareTimeoutHandle
中使用0作为“关闭”标志即可!0表示它是开放的。要做到这一点,请确保在计时器启动时将其清除。例如+1。请注意,您可以将您的
shareOpen
shareTimeoutHandle
组合在一起
0
不是有效的计时器句柄,因此只需在
shareTimeoutHandle
中使用0作为“关闭”标志即可!0表示它是开放的。要做到这一点,请确保在计时器启动时将其清除。 var shareOpen = false; var shareTimeoutHandle = undefined; $('#aktivs-share').click(function() { $('#share').slideToggle('slow', function() { }); // check the current state, if open already, close and reset if (shareOpen) clearTimeout(shareTimeoutHandle); else { shareTimeoutHandle = setTimeout(function() { $('#share').slideToggle('slow', function() { }); }, 5000); } // set the new state to be the opposite shareOpen = !shareOpen; });