2013-12-03 41 views
4

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

This是人们感觉如何的一个很好的例子,但几乎任何其他处理样式警告框的问题都有相同的注释。这只是一个造型问题,还是有更多的根本原因来回避这种内置功能?

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

编辑:

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

我听到的大部分内容都是对用户和用户界面不利,但是,如果引起愤怒,注意力集中在我想要的内容上,我应该怎么用?有人提到警报/确认会停止JavaScript执行,并可能阻止您使用其他选项卡。这更接近我期待的功能问题。我明白这对UI有坏处,但我在这里寻找更多的技术原因。

+5

请参阅http://programmers.stackexchange.com/questions/106031/javascripts-prompt-confirm-and-alert-considered-old-fashioned/106039#106039和http://ux.stackexchange.com/questions/ 12884 /下降在JavaScript的提示使用 – JJJ

+2

试试这个链接:http://stackoverflow.com/questions/8825384/alert-is-bad-really – jpodwys

+0

这是惊人的快。谢谢,伙计们,我现在就去看看那些。 –

回答

7

没有“技术原因”您不应该使用内置的浏览器方法进行警报和确认功能。这都是有见地的。

让我们分成两部分。

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

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

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

+3

Alert对于调试会导致页面刷新或重定向的内容特别有用,因为它不会消失,并且页面在您单击确定之前不会重定向。当然,控制台也有一些工具可以在一些浏览器中解决这个问题。 –

+0

非常真实!从我在网上阅读的内容来看,这基本上是我所得到的,但我无法在任何地方找到证实的地方。谢谢!就我而言,这不是真的,但让我们暂时假定你不想停止执行,你想用什么来代替?我认为jQuery UI为屏幕创建了一个div覆盖层,为什么这可能是首选? –

+1

叠加层强制用户以与警报暂停执行相同的方式与对话进行交互,以强制用户与警报交互。 –

2

提醒块JS执行。它很丑。它的功能有限。

它更好地使用模式对话框和回调来处理用户的选择。有很多图书馆都做得很好。

+0

好的,但是为什么?这回答了问题的一部分,但是为什么/如何在模态对话框和回调之类的事情没有的情况下阻止JS执行? –

+3

为了扮演魔鬼的拥护者,阻止js的执行有时可能是需要的。 –

+0

而且,当我添加到上面的编辑中时,在这种情况下实际上是这样。 –

0

从设计角度考虑它。最终用户讨厌弹出窗口,并且提示/警告/确认非常像“垃圾”一样(被滥用)。 Modal窗口更“温和”(正如我的教授所说的),可定制,并且比警报更时尚。

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

+0

是的,我明白这一点。如果这是面向客户的情况,并且每5-6个月使用一次以上,那么在UI上花费大量时间会更容易。我更想弄清楚他们的仇恨是从哪里来的。你认为这主要是因为这个? –

+3

我认为这主要是因为许多开发人员错误地将其用于调试,导致误报,例如认为需要警报才能使ajax请求有效,但实际上因为逻辑错误而无法工作。 –

+0

^这么吓人真的 –

2

这里有一些原因,你应该不是在你的代码中使用警报:

  • 正如你所说,很多警报框可能惹恼用户的警告框
  • 造型,据我知道不可能。而且每一个浏览器显示出来指出错误,这可能不看在你的网站设计
  • 大多数现代/常用浏览器阻止提醒所有的情况下良好的售后服务站点试图显示他们几个,以防止警报垃圾邮件

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

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

+0

*“我通常只使用警报框来进行调试/错误报告,而不是更多。”*这是我唯一认为不应该使用它们的唯一地方。 –

+0

为什么?所以你告诉我你在其他地方使用警报?我发出警报的唯一地方是ajax请求的内部错误事件,并且不仅仅当没有加载jquery时可以使用内置的错误样式显示错误消息。 – RononDex

+1

改为使用console.log(),调试速度要快得多。警告调试是非常糟糕的做法IMO –

相关问题