在 javascript 中设置后台计时器
Set a background timer in javascript
我正在尝试阻止 Dynamics 365/CRM 中的用户快速 单击同一按钮,从而启动一个同步的 window 阻塞事件。
我们能够在 IE 中修复此问题,但 Chrome 似乎 "remember" 按钮点击 - 然后一次又一次地同步启动相同的事件(正如预期的那样)。
我曾想过创建一个后台计时器,它将在第一次单击按钮时启动,这会将变量变为 'True' 直到计时器结束,然后将变量变为 'False' .
在变量设置为 true 的那 X 秒内,随后的按钮单击将触发事件,但不会继续进行几行,函数将在其中检查变量设置为 true 还是 false。
到目前为止,这是我的(不工作的)代码:
function startTimer(duration) {
isTimerOn = true;
var timer = duration, seconds;
setInterval (function () {
seconds = parseInt(timer % 60, 10);
seconds = seconds < 10 ? 0 + seconds : seconds;
if (--timer < 0) {
timer = duration;
}
}, 500);
isTimerOn = false;
};
var isTimerOn = false;
function createWordSummary() {
if (isTimerOn) {
return;
}
try {
startTimer(3);
// Logic here
希望得到一些帮助,在此先感谢!
您可以尝试这样的操作:
let disabled = false;
function startTimer(s) {
disabled = true;
setTimeout(function() {
disabled = false;
}, s * 1000);
}
function createWordSummary() {
if ( disabled ) return;
startTimer(3);
console.log('check');
}
<button onclick="createWordSummary()">Check</button>
希望对您有所帮助!
我正在尝试阻止 Dynamics 365/CRM 中的用户快速 单击同一按钮,从而启动一个同步的 window 阻塞事件。 我们能够在 IE 中修复此问题,但 Chrome 似乎 "remember" 按钮点击 - 然后一次又一次地同步启动相同的事件(正如预期的那样)。
我曾想过创建一个后台计时器,它将在第一次单击按钮时启动,这会将变量变为 'True' 直到计时器结束,然后将变量变为 'False' .
在变量设置为 true 的那 X 秒内,随后的按钮单击将触发事件,但不会继续进行几行,函数将在其中检查变量设置为 true 还是 false。
到目前为止,这是我的(不工作的)代码:
function startTimer(duration) {
isTimerOn = true;
var timer = duration, seconds;
setInterval (function () {
seconds = parseInt(timer % 60, 10);
seconds = seconds < 10 ? 0 + seconds : seconds;
if (--timer < 0) {
timer = duration;
}
}, 500);
isTimerOn = false;
};
var isTimerOn = false;
function createWordSummary() {
if (isTimerOn) {
return;
}
try {
startTimer(3);
// Logic here
希望得到一些帮助,在此先感谢!
您可以尝试这样的操作:
let disabled = false;
function startTimer(s) {
disabled = true;
setTimeout(function() {
disabled = false;
}, s * 1000);
}
function createWordSummary() {
if ( disabled ) return;
startTimer(3);
console.log('check');
}
<button onclick="createWordSummary()">Check</button>
希望对您有所帮助!