我的问题是我想避免在调用javascript函数一段时间后(例如5秒后)调用它。
我创建了一个链接,它调用了javascript函数。如果用户双击它,则调用两次我想避免这种情况。
谢谢, 德万
答案 0 :(得分:5)
我认为处理它的最明智的方法是在单击链接后禁用链接,然后在函数运行完成后重新启用它。假设你有jQuery可用,比如......
$('#button').click(function () {
$(this).attr("disabled", "true");
doTheFunction();
$(this).attr("disabled", "false");
});
如果您确实需要在调用该函数后等待一段时间,那么您可以使用setTimeout重新启用该按钮。
$('#button').click(function () {
$(this).attr("disabled", "true");
doTheFunction();
var btn = $(this);
setTimeout(function () {
btn.attr("disabled", "false");
}, 5000); // reenable the button 5 seconds later
});
编辑:(以下评论)
对于一个链接,我会通过添加和删除一个类来模拟上面的内容,因为你是对的,没有禁用的属性。
$('#link').click(function () {
if ($(this).hasClass('disabled_link')) {
return;
}
$(this).addClass("disabled_link");
doTheFunction();
var link = $(this);
setTimeout(function () {
link.removeClass("disabled_link");
}, 5000); // reenable the button 5 seconds later
});
答案 1 :(得分:2)
由于您使用的是链接,而不是按钮,而不是jQuery(显然),这里是如何在调用并完成某些操作后停止函数执行任何操作5秒(或任何您想要的延迟):
var someFn = (function() {
var lastCalled;
return function() {
var now = new Date();
var limit = 5000; // minimum milliseconds between calls
if (!lastCalled || (now - lastCalled) > limit) {
lastCalled = now;
// do stuff
alert('hey');
} else {
return;
}
}
}());
这类事情通常在服务器上处理,因为客户端脚本不是特别可靠 - 无论您使用何种策略,都无法保证dealy 将实施。