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

时间:2013-12-03 19:22:23

标签: javascript jquery alert

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

This是一个很好的例子,说明人们的感受,但几乎任何其他问题都与警报框的样式有关。它只是一个样式问题,还是有更多根本原因可以回避这种内置功能?

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

修改

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

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

4 个答案:

答案 0 :(得分:8)

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

让我们把它分成两部分。

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

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

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

答案 1 :(得分:3)

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

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

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

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

答案 2 :(得分:2)

警报阻止JS执行。它很丑。它的功能有限。

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

答案 3 :(得分:1)

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

更不用说太多的弹出窗口可能触发一些浏览器提供的“点击此处禁用此网站的提醒”。