何时需要使用模态对话框?

9

模态对话框是不好的,但我一直在读到 "尽可能删除模态对话框"。

什么情况下无法删除模态对话框?我的意思是,有哪些真正的模态任务强制我们使用邪恶的模态对话框?

最常见的例子是 "你要保存吗?" 我认为这是让用户点击保存而不是记住 用户输入很重要 的概念问题。如果您只需自动保存并具有“撤消”或有修订版本的功能,则永远不需要询问用户是否要保存。

  • "您确定要删除吗?" 撤消
  • "您确定要退出吗?" 你为什么要问那个? 你这么虚荣吗?

我们为什么需要模态对话框?

编辑

在我的书中,Web应用程序不包括在内,除非它们在浏览器中编写自己的UI窗口系统。 Web应用程序没有与桌面应用程序相同的工具集。

第二次编辑

我的问题与标记为重复的问题略有不同。我认为没有任何情况下模态对话框是最佳解决方案。所提及的问题假定存在这样的情况。

重复: 什么时候可以接受模态UI


如果你在Lynx的“退出?”提示中回复“N”,它会回复:“太好了!” - gbarry
抱歉重复了,当我输入问题时它没有出现。我称之为对话框,他们使用UI... - Pyrolistical
没问题。反正我也没有关闭的能力。我只是想指出来,让有权决定的人决定他们想做什么。有时他们会把它们保持开放,有时则不会。 - George Stocker
很遗憾,您的第二次编辑也使问题具有争议性.. :-( - George Stocker
3个回答

6

模态对话框的使用场景

  • 当需要输入必填信息时,如在登录过程中输入密码,阻止应用程序的流程。
  • 在集中对话框中收集应用程序配置选项。在这种情况下,通常在关闭对话框时应用更改才会生效,并且在进行编辑时禁用对应用程序的访问。
  • 警告当前操作的影响是不可逆的。这是模态对话框的常见交互模式,但也受到可用性专家的批评,认为它对于其预期用途(保护破坏性操作中的错误)是无效的,并且存在更好的替代方案。

(来源:维基百科)

我何时使用它们

在必须防止用户做出愚蠢行为的情况下。我的公司有一个Web应用程序,用户有时会在完成工作之前离开页面。如果他们没有保存工作内容,我们会提示他们使用模态对话框(标准的onbeforeunload JavaScript函数)。

否则,如果可以避免使用模态对话框,我会尽量避免使用,因为我讨厌应用程序从我正在做的事情中抢走焦点。

编辑:当他们离开页面时,我们不会自动为他们保存工作内容。我们在其他时间会这样做,但是当他们离开页面时不会自动保存,因此需要使用模态对话框。我编写了代码,可以在他们离开页面时保存他们的工作内容,但如果他们意外删除了工作内容并且不想自动保存,则实施这种方法不是一个“好”主意。


我不能为网络应用程序使用模态对话框找借口,因为与桌面应用程序相比,它们具有更少的用户界面工具。 - Pyrolistical
1
只要我能帮得上忙,我就不会这样做。我想使用完整的桌面工具集来制作 Web 应用程序,并拥有 Web 应用程序透明安全性。 - Pyrolistical
1
那么你的自动保存实现有缺陷。它不能简单地覆盖现有信息。它需要至少1个版本回退,以便您可以撤消。 - Pyrolistical
你说得完全正确。不过,这正是我们的客户想要的,并且那就是我们得到的规格说明。我也提出了同样的问题,但我怀疑它不会改变。 - George Stocker
“阻塞应用程序流程,直到输入继续所需的信息…” - 这不是模态对话框的用例,而是它们是邪恶的并且必须避免的原因 - ShreevatsaR
显示剩余2条评论

1

除了用户输入之外,我知道的任何文件都更加神圣。除非我告诉你,否则不应修改任何实现细节中的文件。因此,在退出时出现“是否要保存?”等框是必须的,因为我可能不保存。


这就是为什么我说要自动保存并支持撤销操作。我永远不会覆盖用户输入的唯一副本。 - Pyrolistical
自动保存到哪里?除非我要求,否则我永远不希望您甚至触碰我的文件。您可以拥有某个应用程序数据文件进行操作,但不要触碰我的文档! - BCS
当然,肯定有一种聪明的方法可以做到这一点,而不会触及你的文件,我们不需要在这里弄清楚。 - Pyrolistical
用户可能会意识到他们出了问题,只想退出并重新开始,那么自动保存(即使有撤销)将是一个问题,你怎么知道他们想做什么?当他们再次打开时,您是否向他们呈现差异,这似乎比关闭模态更麻烦。我的看法是0.02美元。 - seanb
尽管我完全理解您的立场,BCS - 我也分享它! - 可用性研究一贯表明,大多数用户期望其操作默认为持续性,这基本上意味着连续保存(带有无限撤销)。 - Dave Sherohman
在该功能上放置一个开关复选框,我就可以接受它了。 - BCS

0
想象一个需要打开对话框执行某些操作的应用程序。现在想象一下,这些对话框将是非模态的:当一个对话框打开时,您可以更改选择,甚至更糟的是 - 调用另一个命令,它本身会打开另一个对话框。现在想象一下,这些对话框将是模态的:那么您必须关闭对话框才能继续进行 - 您不能处于选择在对话框下更改或两个命令正在等待输入的状态。

如果你不加思考地使用非模态对话框,那么这种情况就会发生。但是,在更现实的设计中,当你在一个对话框中更改某些内容时,它应该自动更新其他相关的对话框。 - Pyrolistical
对于所有情况来说,这都是不可能的。 - Mot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接