我希望能够在一段时间后或特定事件后使用 Javascript 自动关闭警报框(即
onkeypress
)。根据我的研究,内置 alert()
函数似乎不可能做到这一点。有没有办法覆盖它并控制它打开的对话框?
另外,我不想要将隐藏的 div 显示为警报的覆盖。我需要一个实际的对话框。
正如前面提到的,你确实不能这样做。您可以使用 UI 框架在窗口内创建一个模式对话框,或者您可以有一个弹出窗口,其中包含一个在超时后自动关闭的脚本……每个窗口都有其缺点。如果窗口最小化,浏览器内的模式窗口将不会创建任何通知,并且编程(基于计时器)弹出窗口可能会被现代浏览器和弹出窗口阻止程序阻止。
看来您可以使用 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 可以。
无法控制对话框,如果您可以控制对话框,则可以编写引人注目的 JavaScript 代码。 (除了调试之外,使用警报进行任何操作都不是一个好主意)
我希望能够关闭警报 使用 javascript 自动框 经过一定时间或某个时间后 特定事件(即 onkeypress)
旁注:如果您有警报(“数据”),您将无法保持代码在后台运行(AFAIK)...。该对话框是一个模式窗口,因此您也不能失去焦点。所以你不会有任何按键或计时器运行...
尝试启动盒插件。
var alert = bootbox.alert('Massage')
alert.show();
setTimeout(function(){alert.modal('hide'); }, 4000);
我想你可以打开一个弹出窗口并调用 that 一个对话框。我不确定详细信息,但我很确定您可以通过编程方式关闭从 javascript 打开的窗口。这样就够了吗?
这里唯一真正的替代方案是使用某种带有模式选项的自定义小部件。查看 jQuery UI,了解具有这些功能的对话框示例。几乎所有你能提到的 JS 框架中都存在类似的东西。
我在寻找相同的问题/答案时找到了这个问题/答案,并且我在 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 中按原样运行。
你实际上可以做到这一点,你基本上可以监听这个弹出窗口的发生,然后在它“弹出”之前确认它是否正确,
if(window.alert){
return true
}
您可以使用标签并设置其淡入淡出时间,例如 最初隐藏它并在单击时显示。 $('#div_Message').fadeIn(500).delay(1000).fadeOut(1500);
window.setTimeout('alert("Message goes here");window.close();', 5000);