Eu tenho um formulário contendo (entre outras coisas) três listas suspensas, cada uma com cerca de 5 a 10 opções. As opções nessas listas suspensas estão intimamente relacionadas e algumas das permutações serão inválidas. Isso também significa que se o usuário alterar a seleção em um dos menus suspensos, os valores atuais nos outros dois poderão ser inválidos.
Meu documento de design atualmente afirma que "se uma combinação inválida for escolhida, um erro deverá ser exibido" e "para ajudar o usuário a escolher combinações válidas, todas as opções nas listas suspensas que produzirão uma combinação inválida devem ser pouco iluminadas na lista suspensa. ".
Não estou convencido de que essa é a melhor maneira de lidar com isso, mas não consigo pensar em alternativas melhores. Pensei em combiná-los em um único menu suspenso contendo todas as combinações válidas, mas isso também pode ser complicado.
Alguém tem outras soluções?
Se você pode determinar um pedido entre os menus suspensos, a solução é relativamente fácil:
Cada seleção suspensa redefine as seleções nas seguintes caixas suspensas (a jusante). Também atualiza os campos disponíveis para se ajustarem à seleção atual nesse menu suspenso (sem mostrar opções não permitidas).
Considere, por exemplo, sites de mapas mais antigos: você pode escolher um estado, depois uma cidade e somente uma rua. Seria aceitável que, se você mudasse de estado, perderia a cidade que escolheu anteriormente.
Se houver sem ordem distinta, você pode:
Não permita a seleção dos novos valores que se chocam com as seleções existentes.
Suponho que você possa "colocar pouca luz" (como você coloca) essas opções no menu suspenso antes mesmo da seleção.
"Pouca luz" (como você coloca) esses novos valores problemáticos, mas permite que o usuário os selecione.
Você pode exibir uma caixa de diálogo, explicando que o novo valor é problemático.
O usuário pode escolher:
De qualquer forma, a caixa de diálogo deve ter uma caixa de seleção "lembrar escolha", para a próxima vez que não incomodar o usuário.
Embora eu entenda que pode haver um problema de falta de espaço vertical, eu definitivamente tentaria não usar menus suspensos, tentaria usar elementos do tipo lista (em vez de selecionar vários grupos de entrada de rádio ou ) - isso permite que o usuário veja as alterações acontecendo enquanto seleciona algo em um grupo que afeta as opções em outros grupos.
Além disso - eu pelo menos tentaria: a) fornecer atalho para os conjuntos de seleção mais comuns; b) tentar reprojetar a coisa toda. Essa interface não pode ser chamada de "simples", por mais suave que você possa fazê-lo :)
Visto isso muitas vezes, e enquanto o óbvio é 'não permitir' combinações inválidas, ele tem algumas desvantagens:
O que eu proporia é não proibir escolhas inválidas. Sua especificação não diz que eles devem ser proibidos; A iluminação baixa não é a mesma. Faça as escolhas ilegais distintas das legais, por ênfase, mas permita que elas sejam escolhidas. Junte isso a uma área de mensagem que aparece quando uma combinação ilegal é escolhida, fornecendo o motivo e sugerindo uma alternativa (e não permitindo que o usuário prossiga para a próxima etapa).
Tudo isso é nulo e nulo se as escolhas puderem ser divididas em uma sequência: então faz muito mais sentido apresentar as escolhas em sequência e proibir quaisquer ilegais quando cada opção é apresentada.
Se algumas opções são inválidas, você simplesmente não deve exibi-las. Isso reduzirá a possibilidade de um erro ser exibido ao usuário.
Se for para um aplicativo Web, use JavaScript para eliminar opções inválidas, dependendo da seleção. Revele progressivamente o segundo menu suspenso com as opções apropriadas após o primeiro menu suspenso ter sido usado. O mesmo vale para o terceiro. Valide o lado do servidor e somente se ele não for validado após a validação no servidor, você deve exibir um erro. Somente aqueles com JavaScript desativado ou intencionalmente tentando ignorar seu formulário verão o erro.
Se for para um aplicativo de desktop, use o mesmo tipo de princípio.