gpt4 book ai didi

Javascript `confirm()` 先执行

转载 作者:行者123 更新时间:2023-11-30 13:01:04 27 4
gpt4 key购买 nike

我有一个在 AJAX 调用完成后执行的 javascript 代码。

req.done(function (response, textStatus, jqXHR){
if (response == " ok"){
// values are confirmed
this.s = this._s
this.e = this._e
this.assign = this._assign
this.y = roomline.snapHeight(this.assign);
console.log(response)
drawscreen()

if (confirm('Would you also like to apply a discount/credit?')){
var link = "?some_get_request"
self.location = "assignDiscount.php" + link;
}

} else {
alert(response)
}
});

如您所见,我有一堆东西应该在 confirm() 对话框显示之前发生(比如 drawscreen()console.log )。

问题是这些东西都不会发生在确认对话框之前,而是发生在确认对话框之后!我应该在我的 javascript 控制台中看到“确定”:相反,我在按下确认对话框上的“取消”按钮后看到它。这没有任何意义:当我看到弹出对话框时,“确定”应该在那里。为什么会这样,我该如何解决?

最佳答案

您看到的问题是 JavaScript 是单线程的,confirm 是阻塞的。

console.log,据我所知,是对控制台进行日志记录的异步请求。但是,在脚本完成之前,它无法发送该请求。 drawscreen 也是如此,在脚本完成之前,屏幕实际上无法重绘。

尝试将您的 if block 包装在 setTimeout(function() { ... },1); 中,这将为浏览器提供足够的时间来记录响应并在立即返回您的确认之前重绘屏幕,不给用户时间做任何可能干扰正常操作的事情。

关于Javascript `confirm()` 先执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17391902/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com