如何在调用函数时阻止按钮的垃圾邮件?比如用户只能在按钮上每隔1秒调用一次该功能。
有没有办法呢?因为我尝试了setTimeout但它没有工作它仍然垃圾邮件 顺便说一下,我使用了Jquery。
这是我的代码:
<button class="buttonUpdateStatus" id="idbuttonUpdateStatus" onclick="alertStatus()">Post Status</button>
function alertStatus() {
$('#doneStatus').hide();
$('#loadingStatus').show();
}
答案 0 :(得分:3)
您可以通过以下方式锁定(阻止执行功能逻辑)功能:
var locked = false;
function alertStatus () {
if (!locked) {
locked = true;
setTimeout(unlock, 1000);
$('#doneStatus').hide();
$('#loadingStatus').show();
}
}
function unlock () {
locked = false;
}
您也可以禁用该按钮,使用户根本无法单击该按钮:
function alertStatus () {
$('#idbuttonUpdateStatus').attr('disabled', 'disabled');
setTimeout(enable, 1000);
$('#doneStatus').hide();
$('#loadingStatus').show();
}
function enable () {
$('#idbuttonUpdateStatus').removeAttr('disabled');
}
答案 1 :(得分:1)
您无法阻止在网页中调用某个功能。如果黑客想要弄乱页面中的代码,他们可以。
如果您想阻止特定客户端频繁调用ajax函数,那么您必须使用客户端登录,速率限制等技术在服务器上执行此操作...
如果您想在给定时间段内阻止正常的鼠标点击多次按下按钮,那就非常容易了。您只需在按下按钮时禁用该按钮,并且仅在稍后再次启用它。
答案 2 :(得分:0)
如果我是对的,JQuery的这个小插件怎么去辩论:http://benalman.com/projects/jquery-throttle-debounce-plugin/
答案 3 :(得分:0)
我喜欢konstantin的解决方案,但是它并不能真正防止垃圾邮件,因为如果长时间进行垃圾邮件发送,每1000毫秒仍会单击一次按钮。对于我的需求,最好仅在用户处理完垃圾邮件后才启动代码。所以我想出了这个解决方案:
var timerId;
function _doActionNoSpam() {
//Reset Timeout if function is called before it ends
if (!(timerId == null)) {
clearTimeout(timerId);
}
timerId = setTimeout(function () {
//Place code that you don't want to get spammed here
}, 400); //400ms Timeout
//Place code that can be spammed here (UI updates, etc)
};
我将代码放在了超时中,因此如果再次单击该按钮很快就可以取消执行。例如,如果您有一个“第二天”按钮,该按钮在每次单击时都会对数据库进行大量调用,那么这可能会很有用。在这种情况下,用户可能希望快速单击按钮以将日期移至下周。只有最后一次单击对他确实有用,因此对数据库的调用在最后只能进行一次。
请注意,当用户仅单击一次按钮时,这将在单击和执行代码之间引入一个小的延迟。因此,请确保将超时保持在较低水平(以我的示例为400毫秒)