为什么我不应该在JavaScript中使用Alert?

我需要在某些情况下通知用户并且已经看到不应该使用confirm()和alert()。 相反,很多问题都提到在jQuery UI中使用模态事物,特别是如果你需要设计样式。 这一切都很好,但是,在一天结束时,编码员说你应该远离它的原因是什么?

这是人们感觉如何的一个很好的例子,但几乎任何其他涉及样式警报框的问题都有相同的评论。 它只是一个样式问题,还是有更多根本原因回避这种内置function?

更重要的是,没有一个答案谈论你应该使用什么。 jQuery UI和类似的预构建解决方案是唯一的答案吗? 为什么? 性能或安全性或缺乏经验的编码员是否需要易于使用的东西或……?

编辑:

好的,让我澄清一下。 我问的原因是因为警报function是为了防止用户意外删除他们一直在做的工作,因为有三种方法可以在此页面上启动新计划,并且每个方法都会删除现有的内部html显示计划的div。

我听到的大部分内容都是对用户和用户界面有害,但是,如果引起愤怒,吸引注意力是我想要的,那么我应该使用什么呢? 有人提到警报/确认会暂停JavaScript执行,并可能阻止您使用其他选项卡。 这更接近我期待的function问题。 我确实理解这对UI来说很糟糕,但我在这里寻找更多技术原因。

没有“技术原因”您不应该使用内置的浏览器方法来提供警报和确认function。 这都是自以为是的。

让我们把它分成两部分。

除非您打算为某个目的停止执行代码, 否则不应将警报用于调试。 否则,您应该使用console.log因为如果您的代码涉及异步逻辑,alert实际上可以更改代码的结果。 “ 但IE中不支持console.log! ”是的,如果控制台是打开的。 在生产代码中,您的调试代码不应该在那里。 为了防止被遗忘的console.logs,只需将其填充即可。 对于除调试之外的用途,例如通知用户发生了某些事情,通常最好使用一些其他方式通知用户发生了更改,例如突出显示元素或带有信息文本的横幅,但是,使用没有任何问题只要暂停执行不会影响您的代码,就会出现警报。

确认是询问用户“你确定吗?”的标准方式。 在执行诸如删除信息之类的破坏性操作之前。 它易于理解并被许多网站使用,因此我建议您也在自己的代码中使用它。 替代方案通常会导致额外的代码为您的应用程序添加不必要的复杂性。 但请记住,确认也会阻止执行,因此您应确保它不会影响您可能已运行的任何异步逻辑。

如果您的异步代码写得正确,它通常不会受到执行暂停的影响。

警报块JS执行。 它很丑。 它的function有限。

使用modal dialog和回调来处理用户的选择会更好。 有很多图书馆可以很好地完成这项工作。

以下是您不应在代码中使用警报的一些原因:

  • 正如你所说,许多警报框可能会惹恼用户
  • 据我所知,警报盒的样式是不可能的。 此外,每个浏览器都显示不同,在您的网站设计的所有情况下可能看起来不太好
  • 大多数现代/常见浏览器会在网站尝试显示其中一些警报后阻止警报,以防止发出警报信息

您可以使用jQuery UI对话框作为替代或其他任何能够显示模式对话框的对话框。 这样您就可以自定义/设置对话框的样式,浏览器不会阻止它们。

我通常只使用警报框进行调试/错误报告,而不是更多。

从设计的角度考虑它。 最终用户讨厌弹出窗口,并且提示/警报/确认在本质上是非常“垃圾”的(如此滥用)。 模态窗口更加“温和”(正如我的教授所说),可定制,比警报更时尚。

更不用说太多的弹出窗口可以触发一些浏览器提供的“在此处检查以禁用来自此网站的警报”。