为什么模态对话框是邪恶的?

时间:2008-12-12 00:09:17

标签: modal-dialog

when are modal dialogs truly necessary?处回答最近的问题。为什么模态对话框是邪恶的?是因为人们还是不读它们吗?因为它们经常实施得那么糟糕?还有别的吗?

11 个答案:

答案 0 :(得分:61)

到目前为止,大约一半的答案都是针对确认对话框的缺陷,而不是模态对话框。虽然绝大多数确认对话都是模态的,但这并不意味着这两个术语是同义词。

mod al对话框是将程序置于特定模式的对话框,并且不允许您执行与该模式不对应的任何内容打开。在最常见的实现中,这意味着您无法访问任何其他窗口。

这是邪恶的。

考虑一个地址簿应用程序。假设您在地址簿中有一个现有的人,并且您希望添加他们的室友。

  • 如果“添加人”对话框是非模态的,您可以在旧记录和复制并粘贴数据的新记录之间来回切换。
  • 如果“添加人员”对话框是模态的,则在添加对话框打开时,您无法对旧记录执行任何操作。在选择“添加”之前,您可以选择要复制的内容,但这只是一件事。其他一切都必须手动重新输入。

在极少数情况下,你会遇到一些真正必须在一件事上完成的事情,而不允许用户在完成任务之前偏离该任务。模态对话框适用于此类情况。 但是这些情况非常罕见!这基本上是这个问题引用的其他线程的重点。

答案 1 :(得分:35)

人们不会阅读它们,这是件好事。您希望人们围绕您的UI形成习惯,但在弹出窗口中有一个重要的选择就是让用户点击确定。

他们打断用户,阻止用户做其他事情。

如果您想从主窗口复制并粘贴内容,该怎么办?如果要在模式对话框中复制消息,该怎么办?如果您不在乎,该怎么办?

只需比较IE的查找对话框与Firefox

比较IE的“你想让我们为你记住这个密码吗?”到Firefox

答案 2 :(得分:23)

最好的用户界面是模态的。最糟糕的是。

模态UI - 无论是从对话框,工具栏按钮还是文本提示构建 - 只要每个模式符合用户转换到它的期望,这是唯一可取的。当程序意外地转换到某个模式时...或者该模式要求用户拥有他没有随时可用的信息......那么它将导致用户困难,要么迫使他恢复到以前的模式,要么猜测适当行动,可能产生不良后果。

非模态UI是一套完整的工具。有些与手头的工作有关,有些则不然。用户必须具备足够的技能来选择正确的工具,并以正确的方式应用它们。因此,非模态UI永远不会像良好的模态UI(当前任务的正确工具)那样最优,但它也可能永远不会像坏模式UI那样次优(对于错误的模态UI而言)当前的任务猛烈闯入你粗心的手指)。

设计一个好的模态UI对于非平凡的应用程序来说可能是一个非常困难的任务,特别是对于旨在被更广泛的用户使用的通用程序。菜单系统和对话框试图弥合差距,允许在较大的非模态应用程序中使用特定于任务的小型模态部分。然而,两者都没有特别好的扩展,误用和过度使用使他们声名狼借,通常被视为懒惰程序员的第一个避难所。特别是对话框通常更多地用作强迫用户了解应用程序应该如何使用的程序员(或设计者)的想法,或者在用户处进行困难的设计决策和棘手的错误处理,而不是他们同名的沟通目标。

实际上,Web应用程序的兴起已经在许多论坛,新闻组和Q& A站点中引起了这种趋势,因为程序员习惯于编写超线性逻辑,在需要时提示用户输入。程序而不是当用户可用时...被迫进入一个用户可以非线性导航的系统,并且很可能会将任何限制这种自由的企图视为被颠覆的古怪烦恼而不是必要的邪恶。这些可怜的程序员的悲惨哀嚎在“网络”周围回响,因为他们试图将这种粗略的模态行为强加于非模态系统,并在他们周围崩溃。对于我们这些长期遭受残酷“对话”困扰的人来说,确实是一首可爱的曲调。

答案 3 :(得分:18)

在您阅读我的答案之前,您必须仔细阅读完整的以下信息。所有进程,子进程,任务和线程将无限期暂停,等待您的回答。而且,一旦你完全理解了这个消息,并且可能同意某些法律内容,以及所有这些的所有含义,那么只有这样才能继续。

答案 4 :(得分:7)

在消费者风格的应用程序中,它们或多或少是无用的;用户不会阅读它们,学会解雇它们,当它们阅读它们时,通常最终会感到困惑。我认为是/否/取消对话框是彻头彻尾的懒惰UI设计。 “按钮说出他们做了什么”对话框略胜一筹,因为用户不需要阅读太多。

话虽如此:在数据关键型内联网/“企业”应用程序中,它们或多或少地需要确认破坏性操作或检查可能允许但不建议的非标准工作流程。

所以,我不认为它们在概念上是“邪恶的”,但往往是不良UI设计的结果。

答案 5 :(得分:5)

它们是邪恶的,因为它们违反了用户应该能够指导软件操作的基本原则。模态对话框(通常是对话框的邪恶形式)将用户限制为仅一个操作。

有些答案似乎误解了这是任何弹出窗口要求例如用户确认。这可以在不占用整个应用程序或计算机的情况下完成;这是人们反对的这种行为。

在某些环境中,模态对话框仅在单个应用程序的上下文中约束用户(或者更少)。真正糟糕的模态对话框会阻止用户在整个操作系统中执行任何其他操作(例如,Windows)。

答案 6 :(得分:4)

我不喜欢它们的原因之一是因为它们是串行显示信息(一次显示一条信息)而不是并行显示(所有需要一次查看的信息),并行将允许用户可以选择他们想要查看的内容,因为在串行中你几乎强迫他们选择一个选项。

另外还有一个事实,即他们打破了用户的控制流(例如,从您正在处理的对象窃取焦点),我真的不喜欢这样做。因此,实际上,用户只需点击“确定”,以便他们可以返回到他们在哪里,并忽略对话框中的信息。

请注意,在某些情况下你仍然需要它们。

答案 7 :(得分:3)

Wikipedia article对投诉有很好的总结。

答案 8 :(得分:3)

我不记得我在哪里首先看到这个,但是更好的方法来进行模态对话通常是为了便于查找和使用“撤销”功能。删除文件时,Windows资源管理器实际上都会执它要求确认(模态对话框),然后,在删除文件后,编辑菜单会立即显示“撤消删除”选项。只是一种访问回收站的简单方法,当然,在这种情况下,微软真的可以放弃对话框了。

关键是,你可以经常在没有对话的情况下做一些思考,也许还有一些额外的代码,但对于一个懒惰的,或者更慷慨,一个时间有限的开发人员来说,它太容易了。

那就是说,有时你真的想要对话。考虑典型打印对话框中的所有选项。哪台打印机?所有页面,还是只有几页?多少份?如果没有对话框,我不知道你怎么做...

答案 9 :(得分:3)

Noboy读取它们,它们会中断程序流程。通常,当用作错误通知时,它们是程序失败的前提。当用户意识到正在发生的事情时,消息就消失了,他们可以尽可能地回忆或发明消息。

答案 10 :(得分:2)

我个人认为这完全取决于它是如何完成的。

尝试复制目标目录中存在每个文件的10个文件,使用Windows资源管理器执行此操作。

每个文件的单个模式对话框在这样的操作中确实是正确的答案。我知道你对所有人都是“是的”,但整个循环系统应该以不同方式构建。它应该将所有存在的文件收集到一个大列表中,然后询问“你想用这些文件做什么”,然后让我在列表中确定每个文件,然后单击OK并恢复操作

许多时候,对话框只会中断正常的工作流程。

是的,人们不会阅读对话框。所以如果你必须使用一个对话框,那么一个黄金提示就是改写它。

而不是“你想删除数据库中的这一行吗?”,而是试着写一下这样你就会问(但这不是措辞正确)“你想删除数据库中的这一行?“这样,如果他们只是点击是,这是一个想要继续使用它的用户的典型响应,他们最终什么也不做。