5

如何防止在调用函数时发送垃圾邮件?就像用户只能在按钮上每 1 秒调用一次函数。

有办法吗??因为我尝试了 setTimeout 但它没有工作它仍然在发送垃圾邮件顺便说一句我使用了 Jquery。

这是我的代码:

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



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

4 回答 4

6

您可以通过以下方式锁定(阻止函数逻辑执行)函数:

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');
}
于 2013-04-12T05:27:38.510 回答
1

您不能阻止在您的网页中调用函数。如果黑客想弄乱您页面中的代码,他们可以。

如果您想阻止特定客户端频繁调用 ajax 函数,那么您必须在服务器上使用客户端登录、速率限制等技术来执行此操作...


如果您只想阻止正常的鼠标单击在给定的时间段内多次按下按钮,那很容易。您只需在按下按钮时禁用它,然后再过一段时间再启用它。

于 2013-04-12T05:27:34.617 回答
0

如果我是对的,这个用于 JQuery 的小插件如何去抖动:http: //benalman.com/projects/jquery-throttle-debounce-plugin/

于 2013-04-12T05:27:23.290 回答
0

我喜欢康斯坦丁的解决方案,但它并不能真正防止垃圾邮件,因为如果垃圾邮件持续很长时间,按钮仍会每 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)
};

我将代码放置在 Timeout 中,以便在很快再次单击按钮时可以取消它的执行。这可能很有用,例如,如果您有一个“第二天”按钮,每次单击它都会对数据库进行大量调用。在这种情况下,用户可能希望快速单击按钮将日期移至下周。只有最后一次点击对他真正有用,所以最后只调用一次数据库。

请注意,当用户仅单击一次按钮时,这将在单击和执行代码之间引入一小段延迟。因此,请确保将超时保持在较低水平(在我的示例中为 400 毫秒)

于 2019-09-19T17:33:28.143 回答