无法在纯JS中结合使用setInterval()和if(confirm())

时间:2019-09-13 19:40:39

标签: javascript

我有以下简单的if(confirm())条件,例如

if(confirm('Some question')) {
    agreed_function();
} else {
    cancel_function();
}

function agreed_function() {
    console.log('OK');
}
function cancel_function() {
    console.log('Cancel');
}

现在,我不仅需要单击{Cancel(取消)”按钮,还需要调用cancel_function(),而且如果经过一会儿(例如3秒钟后)也没有单击“ OK”(确定)按钮,则需要调用。因此,如果我们在3秒钟内单击“确定”,则不会调用cancel_function()

这是我的代码,其中仅if(confirm())有效,但间隔无效

var interval = setInterval(function() {
    cancel_function();
}, 3000);

if(confirm('Some question')) {
    clearInterval(interval);
    agreed_function();
} else {
    clearInterval(interval); // not to call the cancel_function() every 3 seconds
    cancel_function();
}

function agreed_function() {
    console.log('OK');
}
function cancel_function() {
    console.log('Cancel');
}

如何解决问题?

1 个答案:

答案 0 :(得分:4)

  

但间隔不起作用

这是因为警报框(包括从confirm创建的警报框)阻止了窗口上的执行。

这意味着您的代码将停止运行,直到关闭警报框。不幸的是,there doesn't seem to be a way to close these alert boxes programmatically,因此您必须等待用户与其交互,然后代码才能继续。

从历史上看,开发人员通过使用流行的UI库(例如JQuery has a model component)或从头开始创建自己的自定义模型,而不使用alert生成的浏览器级别的模型来处理这类事情和confirm


但是要简单回答您的问题,由于警报框您的代码停止运行,因此这就是间隔无法按预期工作的原因。