0

在javascript中,如果我有一个无限循环:

setInterval("popalert", 5000)

在哪里popalert()简单地弹出一个警报框,如果已经有一个尚未关闭的警报框,那么最好的方法是使警报框不会弹出?

4

5 回答 5

3

无法检测到警报是否存在。

不使用setInterval,使用setTimeout

警报发生后重置超时。

jsfiddle 示例

于 2012-05-22T13:48:55.757 回答
0

检测标准的 javascript 警报框是不可能的,因为它们非常简单。如果您继续生成它们,它们只会排队,在现代浏览器中,它实际上为您提供了在几个之后为某个页面禁止它们的选项。

如果任何时候不超过 1 个框对您很重要,我会考虑使用不同类型的通知系统。像jQuery UI Dialog这样的东西。

于 2012-05-22T13:49:40.140 回答
0

popalert 函数可以保存警报框的状态。

var bOpen = false;

然后当它弹出时设置为真

如果它在按下 ok 后关闭或再次将其设置为 false。

当 popalert 再次被调用时,它会检查 bOpen 变量,如果它是真的,它就不会打开一个新的弹出窗口。

我也会使用 settimeout,所以你不会让这个无限循环的东西阻塞你的 gui。

于 2012-05-22T13:50:26.660 回答
0

您无法检测到警报框是否已经存在。您的导航器管理此警报框,因此如果另一个已经在这里,它们将无法弹出。

于 2012-05-22T13:51:08.827 回答
0

您可以使用全局 javascript 变量(在任何函数之外)并将此 var 最初设置为 false。如果调用了 popalert 函数,请检查全局 var 是否为 false。如果是这样,请弹出警报并将 var 设置为 true。这样做只会显示一个警报,但您的函数将一次又一次地执行(如果这很重要)。

于 2012-05-22T13:51:53.480 回答