Javascript 关闭警报框

问题描述 投票:0回答:12

我希望能够在一段时间后或特定事件后使用 Javascript 自动关闭警报框(即

onkeypress
)。根据我的研究,内置
alert()
函数似乎不可能做到这一点。有没有办法覆盖它并控制它打开的对话框?

另外,我不想要将隐藏的 div 显示为警报的覆盖。我需要一个实际的对话框。

javascript dialog alert dom-events
12个回答
24
投票

正如前面提到的,你确实不能这样做。您可以使用 UI 框架在窗口内创建一个模式对话框,或者您可以有一个弹出窗口,其中包含一个在超时后自动关闭的脚本……每个窗口都有其缺点。如果窗口最小化,浏览器内的模式窗口将不会创建任何通知,并且编程(基于计时器)弹出窗口可能会被现代浏览器和弹出窗口阻止程序阻止。


11
投票

看来您可以使用 Notification API 完成类似的事情。您无法控制它保持可见的时间(可能是某种操作系统首选项 - 除非您将 requireInteraction 指定为 true,否则它会永远保持打开状态或直到被关闭或直到您关闭它),并且它要求用户单击“允许”通知”(不幸的是)首先,但这里是:

如果您希望它在 1 秒后关闭(所有操作系统至少将其打开 1 秒):

var notification = new Notification("Hi there!", {body: "some text"});
setTimeout(function() {notification.close()}, 1000);

如果你想显示它比“默认”更长,你可以绑定到 onclose 回调并显示另一个重复通知,我想,以替换它。

Ref:受到 this 答案的启发,尽管该答案在现代 Chrome 中不再起作用,但通知 API 可以。


7
投票

无法控制对话框,如果您可以控制对话框,则可以编写引人注目的 JavaScript 代码。 (除了调试之外,使用警报进行任何操作都不是一个好主意)


4
投票

我希望能够关闭警报 使用 javascript 自动框 经过一定时间或某个时间后 特定事件(即 onkeypress)

旁注:如果您有警报(“数据”),您将无法保持代码在后台运行(AFAIK)...。该对话框是一个模式窗口,因此您也不能失去焦点。所以你不会有任何按键或计时器运行...


3
投票

尝试启动盒插件。

var alert = bootbox.alert('Massage')
alert.show();
setTimeout(function(){alert.modal('hide'); }, 4000);

2
投票

我想你可以打开一个弹出窗口并调用 that 一个对话框。我不确定详细信息,但我很确定您可以通过编程方式关闭从 javascript 打开的窗口。这样就够了吗?


2
投票

这里唯一真正的替代方案是使用某种带有模式选项的自定义小部件。查看 jQuery UI,了解具有这些功能的对话框示例。几乎所有你能提到的 JS 框架中都存在类似的东西。


0
投票

如果您在 JS 中以编程方式执行此操作,则就像重新发明轮子一样。我建议使用名为 jGrowljQuery

插件

0
投票

也许使用 HTML 对话框标签

我在寻找相同的问题/答案时找到了这个问题/答案,并且我在 W3Schools 上找到了使用对话框标签的替代方案,如下面的 HTML / JavaScript 所示。我计划用 JavaScript 函数替换

setTimeout
,这些函数在调用 fetch 之前打开对话框,并且关闭对话框将发生一个承诺,需要更长的时间才能实现,已实现。

<!DOCTYPE html>
<html>
  <body>
    <h1>The HTML Dialog Object</h1>
    <dialog id="myDialog">This is a dialog window</dialog>
    <h2>The show() and close() Methods</h2>

    <script>
      function showDialog(dialog) {
        dialog.show();
        closeDialog(dialog);
      }

      function closeDialog(dialog) {
        setTimeout(function () {
          dialog.close();
        }, 5000);
      }

      function init() {
        setTimeout(function () {
          const dialog = document.getElementById("myDialog");
          showDialog(dialog);
        }, 3000);
      }

      init();
    </script>
  </body>
</html>

希望我可以展示一段视频,但是这段代码将在您的 VS Code Live Server 中按原样运行。


-2
投票

你实际上可以做到这一点,你基本上可以监听这个弹出窗口的发生,然后在它“弹出”之前确认它是否正确,

if(window.alert){
  return true
}

-3
投票

您可以使用标签并设置其淡入淡出时间,例如 最初隐藏它并在单击时显示。 $('#div_Message').fadeIn(500).delay(1000).fadeOut(1500);


-5
投票
window.setTimeout('alert("Message goes here");window.close();', 5000);
© www.soinside.com 2019 - 2024. All rights reserved.