在JS中替换windows.promt

时间:2018-04-12 21:28:20

标签: javascript

我一直在做这方面的大量研究。我最终从那里的JS库中借用了我自己的版本以进行提醒,确认和提示。

主要问题是这些类型的消息不像Windows版本那样暂停执行。 我尝试过休息和投掷,但都没有奏效。通常在提示期间,整点是等待用户输入。由于没有代码暂停,因此工作流程将继续而无需等待。在某些情况下,我可以通过将代码放入回调来处理它。但这并不总是符合我的需要。

不幸的是IE实现真的很难看。 Chrome效果更好,但无法强制用户使用Chrome。

有没有人想出办法使这些真的像Windows版本一样。

3 个答案:

答案 0 :(得分:0)

幸运的是,没有办法实现与窗口alertprompt和& 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。我可以看到很多用途。感谢。