防止按钮的垃圾邮件调用功能

时间:2013-04-12 05:24:48

标签: jquery html

如何在调用函数时阻止按钮的垃圾邮件?比如用户只能在按钮上每隔1秒调用一次该功能。

有没有办法呢?因为我尝试了setTimeout但它没有工作它仍然垃圾邮件 顺便说一下,我使用了Jquery。

这是我的代码:

<button class="buttonUpdateStatus" id="idbuttonUpdateStatus" onclick="alertStatus()">Post Status</button>



 function alertStatus() {
        $('#doneStatus').hide();
        $('#loadingStatus').show();
  }

4 个答案:

答案 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毫秒)