javascript - 无法在纯 JS 中组合 setInterval() 和 if(confirm())

标签 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_function() 不仅在我们单击“取消”按钮时,而且在一段时间后(例如 3 秒后)没有单击“确定”按钮时.因此,如果我们在 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');
}

如何解决问题?

最佳答案

but the interval doesn't [work]

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

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

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


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

关于javascript - 无法在纯 JS 中组合 setInterval() 和 if(confirm()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57929498/

相关文章:

javascript - 使用 javascript bootstrap 插入超链接

javascript - 如何保存变量/文本以便稍后在 Cypress 测试中使用?

javascript - 是否有可能知道用户在页面上花费了多长时间?

javascript - CSS 和 JQuery : spaces inside image name break code of url()

javascript - 在 "Reflux"中, Action 的作用是什么?

javascript - 在reactJs中动态添加表行时出错

javascript - Timbre.js 键盘输入似乎不起作用

javascript - 从 jquery 中同一对象的属性设置输入字段和标签的正确方法是什么?

javascript - 将数据传递给 vueJS 上的模态组件

javascript - Jquery添加到下拉列表