Javascript关闭警报框

Posted

技术标签:

【中文标题】Javascript关闭警报框【英文标题】:Javascript close alert box 【发布时间】:2010-10-02 13:53:05 【问题描述】:

我希望能够在一定时间后或在特定事件(即onkeypress)后使用 javascript 自动关闭警报框。根据我的研究,使用内置 alert() 函数似乎不可能。有没有办法覆盖它并控制它打开的对话框?

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

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

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

参考:受this 答案的启发,虽然该答案在现代 Chrome 中不再适用,但 Notification API 可以。

【讨论】:

requireinteraction 标志也是“假定的”以使其无限期保持(直到他们关闭它或您使用#close 方法)FWIW(在 OS .X 上默认超时为 5 秒 FWIW)跨度> 【参考方案3】:

无法控制对话框,如果您可以控制对话框,则可以编写突兀的 javascript 代码。 (除了调试以外的任何事情都使用 alert 不是一个好主意)

【讨论】:

现在...我承认我仍然不时这样做,但是...真的吗?调试警报?你提倡那个? alert() 非常适合调试。上次我在 iPad @ office 上编写 userjs 时使用它。上帝保佑警报()! :) 我发现 alert 和 console.log 在不同情况下都有帮助。千万不要在循环中使用alert();。让电脑崩溃的好方法:)【参考方案4】:

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

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

【讨论】:

我的警报框会被异步事件触发,所以这应该不是问题(理论上)。 JavaScript 不是异步的。调用 alert/confirm/prompt 会冻结所有脚本处理(实际上通常是整个 Web 浏览器),直到用户回答为止。 @bobince JavaScript 确实允许 异步 行为;但它不是多线程。如果线程冻结在一个代码块中——异步与否——所有代码都将在该点冻结。【参考方案5】:

试试启动盒插件。

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

【讨论】:

【参考方案6】:

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

【讨论】:

很好的解决方法,但 OP 只需要警报对话框。但这应该适用于那些想要控制对话的人。 +1【参考方案7】:

这里唯一真正的选择是使用某种带有模态选项的自定义小部件。查看 jQuery UI 以获得具有这些功能的对话框示例。几乎每个你能提到的 JS 框架中都存在类似的东西。

【讨论】:

我知道,但不幸的是,它确实是在 JavaScript 中处理这些东西的唯一方法。 不用生气,你问了一个问题,我说做不到,做不到,提供了替代方案。 哇...多年后,我无法相信我是多么的白痴。抱歉,当您只想提供帮助时,我真是个笨蛋。【参考方案8】:

如果您在 JS 中以编程方式执行此操作,那就像重新发明***一样。我建议使用名为 jGrowl 的 jQuery 插件

【讨论】:

jGrowl 只显示一个内联 div。我需要一个对话框。不过还是谢谢。【参考方案9】:

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

if(window.alert)
  return true

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:
window.setTimeout('alert("Message goes here");window.close();', 5000);

【讨论】:

以上是关于Javascript关闭警报框的主要内容,如果未能解决你的问题,请参考以下文章

关闭警报框后如何重定向页面?

如何停止音频警报?

如何将 javascript 警报框标题更改为 UIWebView?

如何在 Javascript 的警报/确认框中显示图像?

Firefox 上未显示 Javascript 警报框

按下按钮确认的 JavaScript 警报框