it-swarm.cn

具有第三状态的布尔开关

注意:每个人似乎都误解了这个问题。从字面上看,每个人。我不是在创建某些注册表格,也不是在收集个人数据。这是一部分的形式,用于在某些条件下过滤大量人员。

我有一个查询创建者表单,可以帮助用户创建SQL查询。列出了查询的所有可能变体,用户必须选择所需的变体并运行查询。

问题

对于个人,用户可以选择性别。从外部看,它看起来像是布尔运算(男性或女性),但它还有一个变化。

  1. 个体是[〜#〜]男性[〜#〜]
  2. 个人是[〜#〜]女性[〜#〜]
  3. 不应考虑个人性别(可以是[〜#〜]男性[〜#〜][〜 #〜] female [〜#〜]

我已经将单选按钮替换为Switch,如下所示:

Screenshot of widget

我如何表示第三种状态?

62
Shreyas Tripathy

如果我正确理解了问题的前提,那么用户应该决定的是:

  1. 如果用户要考虑(筛选)以下选项之一
  2. 如果对1的回答为“是”,则选择以下选项之一

可能的结果是:

  • 选项A
  • 选项B
  • 不适用

原始提案[演示]

考虑到您正在使用 切换按钮 ,对于第三个结果,您可以取消选择两个选项(添加额外的注释以澄清这种可能性,或者添加“(可选)” 旁边的标签)。可以选择一个按钮或非按钮。单击已选择的按钮将取消选择它。

第二个建议:让用户决定1,然后再决定2。复选框启用/禁用按钮。在这种情况下,切换按钮可以用作需要选择一个的单选按钮。

(感谢@theonlygusti对复选框文字的反馈)

81
Alvaro

这里:

您正在创建搜索过滤器?只需添加一个选项,就意味着您不必关心此过滤器选项。

男性|女|没关系

其他名称:

  • 任何
  • 要么
  • 大家
  • 不适用(不适用)

我最喜欢“任何”。


OP表示(在此答案的评论中)担心此解决方案将迫使用户做出额外的点击。但是,正如IMSoP所说:

如果默认值为“任何”,则默认情况下应选择该选项。

只要有一个默认选择的选项。

115
theonlygusti

您要搜索的是“两者”,“任意”或“全部”(以防您添加更多性别类别)。

全部-女性-男性

因此,很明显,将包括两种(或全部)性别的结果。这样,用户必须选择三个切换之一,默认情况下可能会选择“全部”。

28
Luciano

在许多情况下,上下文确实非常重要,明智的做法是寻找一种一致的方法来进行所有过滤,而不仅仅是男性/女性。如问题所述:

这是一部分的形式,用于在某些条件下过滤大量人员。

其他“条件”又是什么呢?他们包括爱好吗?居住国家/地区/城市?部?服务年限?是否要过滤多个/嵌套选项?

作为替代方案,值得研究一下电子商务环境中“典型”过滤器的工作方式:

enter image description here

  • 如果未选择任何内容,则不应用过滤器在这种情况下
  • 如果选择一个(或多个),则仅显示具有该条件的那些记录
  • 如果选择了所有选项,则显示所有带有这些选项的项目(注意:如果一个项目没有任何选项,则不会显示该项目在男性/女性示例中,如果用户同时选择男性和女性选项,则仅显示性别填写的人)
12
wintvelt

如何为第三状态添加第三单选按钮

enter image description here

12
DPS

对于包括“无选择”以及其他专有选择的选择,一个好的老式选择框非常棒!在这种特定情况下,它将允许您具有默认值“不过滤”,以及所需的其他选项,例如(显示关闭状态,以及打开时的选项):

Select showing non-binary options

明智地按字母顺序排序还具有尼斯的副作用,因此您可以回避任何将哪个选项放在首位的政治考虑!

9
Beejamin

正如其他人建议的那样,提供“男性”或“女性”以及“其他”(未指定)(或根据收集的数据而选择的任何数量)。

但是您的问题实际上是关于如何消除整个字段,该字段应该是复选框表示它是查询/结果的一部分(下图示例)OR您应该添加/删除/重新排序字段

如果有很多字段可供选择,则第二个选项效果最佳。第一个选项对用户来说比较容易。

复选框示例:

Gender Selection

8
Graeme Wicksted

我认为对于这种情况,下拉菜单是最好的UI对象。

mockup

下载bmml源 –使用 Balsamiq Mockups 创建的线框

用户可能会更熟悉,一眼就能看出选择的内容,并且可以轻松地变回“任何”状态。另外,例如,如果要添加“变性者”,它是可扩展的。唯一的潜在缺点是,其他选项在没有交互的情况下不会显示给用户。

(假设源数据不是自由格式。如果是自由格式,则可编辑组合框可能是最好的,尽管不是最直观的。)

7
wmassingham

根据到目前为止评论中的所有其他信息,我建议添加一个重置按钮。它提供所需的“未设置”状态,并且不会使用户猜测如何取消设置它。

enter image description here

7
jazZRo

如果要在查询中添加或删除某些过滤器选项,请考虑以下方法:所有活动过滤器在末尾用单独的行表示为框,并且可以单独删除以禁用过滤器(通常使用末尾的X)。这类似于在大多数电子邮件和文本消息应用程序中指定多个收件人的方式。请记住,如果所有其他过滤器选项都是强制性的,则这可能没有任何意义(我必须更多地了解查询构建器的工作方式,以判断向用户的心理模型添加“框式过滤器”是否值得)。

4
Martin Gjaldbaek

我同意其他两个答案:看来您需要第三个“无关紧要”的选择。您可以考虑以下措辞:

  • 没关系
  • 任何
  • 不重要

当然,这些都不行:

  • 其他(与挑选既不是M也不是F的项目无关)
  • 两者(如果您希望这些“无关紧要”的情况到处都出现则不好:您不能说“ A,B,C,D都”)
  • 以上都不是(与“其他”相同)
  • 所有这些(可能很好,但是我宁愿选择“任何”或“其中任何一个”)

作为第二个关注点,性别的具体情况具有一整套含义,以至于其他人如此勇敢地辩护(即使他们很大程度上错过了您的问题的要点)。性别似乎是一个非常敏感的话题:也许下次再用另一个例子:)

4
Simone

更好的解决方案:您可以使用jQuery的三态开关。 https://vanderlee.github.io/tristate/enter image description here

<input type="checkbox" class="tristate" value="1">
<input type="checkbox" class="tristate" value="1" checked="checked">
<input type="checkbox" class="tristate" value="1" indeterminate="1">

布尔开关被设计为只有两种状态。

如果您需要“第三”状态,则需要使用其他内容。单选按钮,幻灯片,下拉列表。如果您要过滤,那么我将为每个类别使用一个开关(不是三个状态)。因为,您有4种可能的搜索组合

Male   filter [ ON | OFF  ]
Female filter [ ON | OFF  ]
3
Jose Berengueres

列出了查询的所有可能的变体,用户必须选择所需的变体

我会说这回答了您的问题。您不应将性别字段视为布尔值,而应将其视为枚举值,在您的情况下恰好只支持2个不同的值。

从这种意义上讲,就像显示任何其他枚举一样,简单地显示一个选择:

  • 单一选择或带有(全部,A,B,C)选项的下拉列表;
  • 或者,选择项或一系列复选框以及每个选项以及旁边的常规(全选/不选)动作。
1
njzk2

这是一个有两个选择的情况,但是您可能会认为这是一个有N个选择的情况的特定情况。然后我会问,您将如何创建具有N个选择的过滤器,然后应用N = 2。

这种方法的好处是,如果您希望或需要包括其他性别,则无需更改过滤器限额。而且,它与具有N个选择的其他过滤器具有更高的一致性。

只是复选框列表呢?

Filter by gender:

[x] Male
[x] Female

它们可以同时打开,也可以其中之一打开。应用程序应确保您不能取消选中最后一个选项,因为这将导致所有项目都被过滤掉。

如果以后需要扩展它:

Filter by gender:

[ ] Male
[x] Female
[x] Other
[x] Not specified

唯一的缺点是可能需要更多空间。通常,我建议您将过滤器放在一列而不是一行中。

1
Joost Lubach

节省空间的选择:两个按钮,“男性”和“女性”,最多可以突出显示一个。

这是一个过滤器。过滤器从数据集中删除数据。选择“男性”,仅使用标记为“男性”的记录。选择“女性”,仅使用标记为“女性”的记录。不选择,将使用所有记录。默认情况下,未选择任何内容。例如,如果用户选择了“男性”,并且改变了主意以不选择任何内容,则再次单击“男性”将其关闭。

有些人似乎对那些不属于或不想属于这些类别,或者不想告诉自己的性别的人有偏执。如果您什么都不选,这些人显然会在列表中。这是正确的-我不希望迪克,汤姆和哈利任何人都能找到所有跨性别雇员的完整列表(可能很少),因为如果他们,这不太可能导致骚扰或歧视很容易在大量人口中挑选出来。

1
gnasher729

考虑它的另一种方法是具有两个切换按钮,即使用用户选择的内容进行过滤。如果他们没有选择任何一个,则不要在查询中包括它。如果选择其中一个或两个都在where子句中添加...和gender ='male'...,或在where子句中添加...和(gender ='male'或gender ='female' )。

如果始终存在性别,这将产生相同的结果,即在ui中未选择性别,或者两者都选择。

如果“性别”可以为空,那么您可能要添加“空”作为可选项目:[NULL] [MALE] [FEMALE]

对我来说,这是否真的取决于ui的上下文,是我选择激活该字段的复选框,还是仅列出特定字段具有的选项。

0
Robert Baron

对于是/否/都不是过滤器输入,这种紧凑的方法又如何呢?

从列标题中的排序按钮获取提示,每次单击可从关闭/向上/向下/关闭切换

一个按钮,可更改每次点击的值,显示当前的过滤器选择:

--------------------
| filter by gender |    (gender filter is off)
--------------------

(点击)

--------------------
|      female      |    (female filter is on)
--------------------

(点击)

--------------------
|       male       |    (male filter is on)
--------------------

(点击)

--------------------
| filter by gender |    (gender filter is off)
--------------------

“女性”和“男性”按钮的颜色可以相反,以表示给定的过滤器处于“打开”状态

0
stuart

布尔只有两个状态;开/关或一/零。另一方面,如果它在数据库中,则可以为null,而不设置。因此,对于男性,女性或其他,请使用零,一个或null。一个布尔字段中的三个状态。

0
Simon

您最好有两个是/否字段,而不是单选按钮。它仍然可以看起来像您所拥有的一样,但是它允许所有4种状态,包括打开和关闭两个状态。为了强调它的开/关功能,您可以添加一个小开关,以切换到每个性别。

0
samerivertwice

我会使用复选框,因此您选中了要考虑进行搜索的复选框,因为基本上您具有“搜索男性” /“搜索女性” /“同时搜索”

第二个优点是,如果您的系统扩展为包含其他性别,则只需添加新的复选框

0
deworde