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

Why shouldn't I use Alert in JavaScript?

本文关键字:JavaScript Alert 我在 不应该 为什么      更新时间:2024-02-09

在某些情况下,我需要通知用户,并且已经看到不应该使用confirm()和alert()。相反,很多问题都提到在jQueryUI中使用模态,尤其是在需要设置样式的情况下。这一切都很好,但归根结底,程序员说你应该远离它的原因是什么?

这是一个很好的例子,说明了人们的感受,但几乎所有其他关于设置提醒框样式的问题都有相同的评论。这只是一个样式问题,还是有更根本的理由回避这个内置功能?

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

编辑:

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

我听到的大多是,这对用户和UI都不好,但是,如果我想要的是引起愤怒、吸引注意力的东西,我应该用什么来代替呢?有人提到,提醒/确认会停止JavaScript执行,并可能阻止您使用其他选项卡。这更接近于我预期的功能问题。我确实理解这对UI不利,但我在这里寻找更多的技术原因。

没有"技术原因"不应该使用内置的浏览器方法来实现警报和确认功能。这都是固执己见。

让我们把它分成两部分。

警报不应用于调试,除非您打算让它停止执行代码。否则,您应该使用console.log,因为如果您的代码涉及异步逻辑,那么alert实际上可以更改代码的结果。"但是console.log在IE中不受支持!"是的,如果控制台是打开的。在生产代码中,调试代码无论如何都不应该存在。为了防止被遗忘的console.log,只需对其进行polyfil即可。对于调试以外的用途,例如通知用户发生了什么事情,通常最好使用其他方式通知用户发生更改,例如用信息文本突出显示元素或横幅,在这种情况下,只要执行中的暂停不会影响您的代码,使用警报就没有什么问题。

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

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

警报阻止JS执行。太难看了。它的功能有限。

使用模态对话框和回调来处理用户的选择要好得多。有许多图书馆在这方面做得很好。

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

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

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

  • 正如你所说,很多警告框可能会惹恼用户
  • 据我所知,设计提醒框的样式是不可能的。此外,每个浏览器都会不同地显示它们,这可能在所有情况下都不适合你的网站设计
  • 大多数现代/常见的浏览器在网站尝试显示一些警报后会阻止警报,以防止垃圾邮件

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

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