41

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

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

4

11 回答 11

22

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

于 2009-01-20T23:43:30.243 回答
11

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

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

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

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

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

于 2017-07-17T20:13:36.967 回答
6

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

于 2009-01-20T22:23:30.547 回答
3

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

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

于 2009-01-20T22:27:43.970 回答
3

尝试启动盒插件。

var alert = bootbox.alert('Massage')
alert.show();
setTimeout(function(){alert.modal('hide'); }, 4000);
于 2017-09-01T09:39:48.387 回答
1

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

于 2009-01-20T22:23:19.110 回答
1

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

于 2009-01-20T22:36:54.763 回答
-1

如果您在 JS 中以编程方式执行此操作,则就像重新发明轮子一样。我推荐使用一个名为jGrowl的jQuery插件

于 2009-01-20T22:24:28.657 回答
-1

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

if(window.alert){
  return true
}
于 2019-11-06T18:23:24.903 回答
-3

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

于 2012-02-27T06:07:26.483 回答
-5
window.setTimeout('alert("Message goes here");window.close();', 5000);
于 2017-07-20T17:15:44.330 回答