防止点击处理程序反复触发jQuery,但允许在执行最后一个处理程序的设定时间后执行处理程序

问题描述 投票:0回答:1

我执行了以下操作:允许单击处理程序在单击后立即执行。但是,连续点击将禁止处理程序完全触发。这里的'连续'是从我上次做click时测量的。我想测量上次执行click处理程序时的时间。我正在考虑像startTime函数这样的东西,可以测量自上一个执行click处理程序以来经过的时间。有这样的功能吗?如果没有,你有什么建议?

我的代码:

let tdnTimeoutStatus;
let tdnStatus = true;
$('#toggleDepositNote').click(function() {
    if (tdnStatus) {
        toggleDepositNote();
        tdnStatus = false;
    }

    if (tdnTimeoutStatus)
        clearTimeout(tdnTimeoutStatus);

    tdnTimeoutStatus = setTimeout(function() {
        tdnStatus = true;
    }, 250);
});
javascript jquery
1个回答
0
投票

在思考之后,我实际上不需要测量上次事件处理程序触发时的时间。相反,我只需要setTimeout,使处理程序在最后一个处理程序后的一段时间后再次触发。

我将上面的代码更改为以下内容:

let allowHandler;
let tdnStatus = true;
$('#toggleDepositNote').click(function() {
    if (tdnStatus) {
        toggleDepositNote();
        tdnStatus = false;

        allowHandler = setTimeout(function() {
            tdnStatus = true;
        }, 300);
    }
}

但是,我确实欢迎更优雅的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.