是否有不暂停脚本的 JavaScript 警报?

IT技术 javascript
2021-03-13 21:40:05

我正在寻找类似的东西alert(),但这不会“暂停”脚本。

我想显示一个警报并允许下一个命令,一个表单submit(),继续。所以页面会在显示警报后发生变化,但不会等到用户单击“确定”。

有没有这样的事情,或者它只是那些不可能的事情之一?

6个回答

您可以在 setTimeout (非常短的超时时间)中执行警报,因为 setTimeout 是异步的:

setTimeout("alert('hello world');", 1);

或者要正确执行此操作,您确实会在 setTimeout 中使用方法而不是字符串:

setTimeout(function() { alert('hello world'); }, 1);

否则,您将面临 JavaScript 注入攻击。当您传递一个字符串时,它会通过 JavaScripteval函数运行

setTimeout不是异步的,它只是推迟了阻塞代码的同步执行。一旦显示警报,代码执行仍会被阻止,直到用户单击OK
2021-04-27 21:40:05
不要将字符串传递给 setTimeout,而是传递一个函数。setTimeout(function() { alert('hello world'); } ) 更好——函数是 JavaScript 中的一级对象
2021-04-28 21:40:05
此解决方案不适用于 Chrome,即使在 setTimeout 中,警报也会暂停所有浏览器脚本。
2021-05-01 21:40:05
是的,我知道我应该把它作为一个函数而不是一个要评估的字符串来完成。
2021-05-04 21:40:05
是的,John Weisz 所说的,它没有帮助,一旦有警报,页面就会在后台冻结(除了一些动画)
2021-05-08 21:40:05

如果已经在使用 JQuery,http : //docs.jquery.com/UI/Dialog很容易使用并且样式很好。

是的,以前用过这个,但我不想为应该很简单的东西添加所有额外的代码。
2021-04-21 21:40:05

它可能不是您要查找的内容,但使用 window.status = 'foo' 可能是合适的。

我在我的一个用于 Intranet 的 web 应用程序中经常使用它。setTimeout 方法也有效,但如果浏览器忙于密集任务,它可能会阻塞。然而,状态栏更新总是即时的。

这确实要求您的查看者具有 javascript 可以更改状态栏的设置——如果它是受信任的站点,则总是如此。

@maxpleaner 现在,什么都没有当浏览器具有永久状态栏时,它会更有用。
2021-04-26 21:40:05
改变window.status应该做什么?
2021-05-08 21:40:05
好主意,但不是很明显。我试图阻止用户再次单击该链接,因此他们最终不会多次提交表单(不会弄乱数据,但会因为他们不期望而弄乱用户的头部)表单提交,但需要保存数据)。
2021-05-15 21:40:05

在这种情况下,更适合使用 DHTML 和 JavaScript 来动态显示消息,无论是在纯 HTML 元素中,还是在看起来更像对话框(但不是)的东西中。这会给你你需要的控制。所有主要的 JavaScript 框架(YUI、Dojo 和其他)都可以让您异步显示消息。

不可靠。在新页面上使用 div。

在页面之前需要它,以便用户知道他们的数据正在提交。
2021-04-28 21:40:05
那么最好的方法是在后台将其提交给返回更新的 Web 服务。这样你就不需要在页面完成之前更改页面。setTimeout("alert()") 经常被阻止:这取决于您的情况,这是否可能是一个问题。
2021-05-02 21:40:05