![](/img/trans.png)
[英]Running a function after a certain period of time without holding up the execution thread
[英]On / Off function after a certain period of time
想知道如何使.off()仅在特定时间段内发生。 我有一个div,一旦单击,我想禁用click事件2秒钟,然后允许再次单击。 目前我所能做的就是单击div,然后单击它就关闭了。
这是我要问的简短示例:
$('.test').on('click', function() {
// *do stuff*
$('.test').off('click'); *for a certain perdiod of time*
});
使用布尔变量作为标志来声明是否应执行单击处理程序,而不是附加/分离多个元素中的事件,是一项非常简单的任务。 尝试这个:
var clickEnabled = true;
$('div').click(function() {
clickEnabled = false;
setTimeout(function() {
clickEnabled = true;
}, 2000);
});
$('.test').on('click', function(e) {
if (!clickEnabled) {
e.preventDefault();
} else {
// do stuff...
}
});
请注意,您还应该使禁用.test
的事实在用户界面中可见,否则,当访问者单击需要执行操作的元素时,它们只会使访问者感到困惑和烦恼,但是什么也不会发生。
一段时间后激活怎么办?
function myFunction() {
...do stuff
$('.test').off('click'); for a certain perdiod of time
setTimeout(function(){ $('.test').on('click', myFunction)}, 2000);
}
使用setTimeout,您可以执行以下操作:
var enabled = true;
var timeoutSeconds = 2;
$(function () {
$('.test').on('click', function(e) {
if (enabled) {
// *do stuff*
enabled = false;
window.setTimeout(function() {
enabled = true;
}, timeoutSeconds * 1000);
} else {
e.preventDefault();
}
});
});
您可以这样做。
function onClick() {
// do stuff here
$('.test').off('click');
setTimeout(function(){
$('.test').on('click', onClick);
}, 2000)
}
$('.test').on('click', onClick);
或者您可以使用css和toggleClass做到这一点
// css
.disabled {
pointer-events: none;
}
// js
$('.test').on('click', function(){
// do stuff here
$('.test').addClass('disabled');
setTimeout(function(){
$('.test').removeClass('disabled');
}, 2000);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.