我一直在做这方面的大量研究。我最终从那里的JS库中借用了我自己的版本以进行提醒,确认和提示。
主要问题是这些类型的消息不像Windows版本那样暂停执行。 我尝试过休息和投掷,但都没有奏效。通常在提示期间,整点是等待用户输入。由于没有代码暂停,因此工作流程将继续而无需等待。在某些情况下,我可以通过将代码放入回调来处理它。但这并不总是符合我的需要。
不幸的是IE实现真的很难看。 Chrome效果更好,但无法强制用户使用Chrome。
有没有人想出办法使这些真的像Windows版本一样。
答案 0 :(得分:0)
幸运的是,没有办法实现与窗口alert
,prompt
和& confirm
。它们是本土性质的,而模仿这种行为的东西不会像原始函数那样起作用。
通常在提示期间,整点是等待用户输入。以来 没有代码暂停,工作流程会继续而不等待。
JavaScript的异步性质提供了一些简洁的结构来改变您的工作流程,因此它不需要阻止代码才能正常工作。 async/await
是其中一种结构。使用它会产生编写阻塞代码的感觉(实际上它是非阻塞代码),这可能与您当前的代码结构一致。
尝试通过使用非生产性无限循环来实现对JavaScript执行的实际阻止在这种情况下不能很好地工作。使用大多数浏览器提供的开发工具可以轻松绕过这样的循环,更不用说它是多么低效和耗电。
使用开发人员工具可以绕过大多数(如果不是)任何事情。因此,您应该瞄准异步解决方案(或任何其他非阻塞方法),而不是乱搞无限循环之类的东西来实现阻塞代码执行。
答案 1 :(得分:0)
由于您已经提到了回调,我想介绍Promises。
Promise让您有机会使代码看起来像是同步的,而实际上它是异步运行的。
举个例子,我使用jQuery UI Modal Form demo为基础:
const myAlert = (msg) => {
return new Promise((resolve, reject) => {
$("#dialog-form").text(msg);
var dialog = $("#dialog-form").dialog({
autoOpen: false,
height: 400,
width: 350,
modal: true,
buttons: {
Ok: function() {
dialog.dialog( "close" );
resolve();
}
}
}
})};
并用
调用它myAlert('This is my alert').then(() => {
// Execution continues after button click
});
大多数主流浏览器都支持开箱即用的承诺:Can I use promises?
答案 2 :(得分:0)
async/await
。我可以看到很多用途。感谢。