Ao usar os navegadores mais novos compatíveis com HTML5 (FireFox 4, por exemplo);
e um campo de formulário tem o atributo required='required'
;
e o campo do formulário está vazio / em branco;
e o botão enviar é clicado;
os navegadores detectam que o campo "obrigatório" está vazio e não envia o formulário;
Em vez disso, o navegador mostra uma dica solicitando ao usuário que digite texto no campo.
Agora, em vez de um único campo de texto, tenho um grupo de caixas de seleção , das quais pelo menos uma deve ser marcada / selecionada pelo usuário.
Como posso usar o required
atributo HTML5 nesse grupo de caixas de seleção? (Como apenas uma das caixas de seleção precisa ser marcada, não posso colocar o required
atributo em todas as caixas de seleção)
ps. Estou usando simple_form , se isso importa.
ATUALIZAR
O atributo HTML 5 podemultiple
ser útil aqui? Alguém já o usou antes para fazer algo semelhante à minha pergunta?
ATUALIZAR
Ele parece que este recurso não é suportado pela especificação HTML5: QUESTÃO-111: O que faz de entrada @ exigida média para @type = caixa.?
(Status do problema: o problema foi marcado como fechado sem prejuízo. ) E aqui está a explicação .
ATUALIZAÇÃO 2
É uma pergunta antiga, mas queria esclarecer que a intenção original da pergunta era poder fazer o que precede sem usar Javascript - ou seja, usando uma maneira HTML5 de fazê-lo. Em retrospecto, eu deveria ter tornado o "sem Javascript" mais óbvio.
fonte
Respostas:
Infelizmente, o HTML5 não fornece uma maneira imediata de fazer isso.
No entanto, usando o jQuery, você pode controlar facilmente se um grupo de caixas de seleção possui pelo menos um elemento marcado.
Considere o seguinte trecho de DOM:
Você pode usar esta expressão:
que retorna
true
se pelo menos um elemento estiver marcado. Com base nisso, você pode implementar sua verificação de validação.fonte
É um truque simples. Este é o código jQuery que pode explorar a validação do html5 alterando as
required
propriedades, se alguém estiver marcado. A seguir está o seu código html (certifique-se de adicionar o necessário para todos os elementos do grupo.)A seguir, está o script jQuery, que desabilita a verificação adicional da validação, se houver alguém selecionado. Selecione usando o elemento name.
Pequenas dicas aqui: Como você está usando a validação html5, execute-a antes que ela seja validada, ou seja, antes do envio do formulário.
fonte
Acho que não há uma maneira padrão de HTML5 para fazer isso, mas se você não se importa em usar uma biblioteca jQuery, consegui obter uma validação de "grupo de caixas de seleção" usando o recurso de validação " exigido por grupo " do webshims :
Os documentos para o grupo exigido dizem:
E aqui está um exemplo de como você o usaria:
Eu uso principalmente webshims para polyfill recursos HTML5, mas também possui algumas ótimas extensões opcionais como esta.
Ele ainda permite que você escreva suas próprias regras de validade personalizadas. Por exemplo, eu precisava criar um grupo de caixas de seleção que não fosse baseado no nome da entrada, então escrevi minha própria regra de validade para isso ...
fonte
O HTML5 não suporta diretamente exigir que apenas uma / pelo menos uma caixa de seleção esteja marcada em um grupo de caixas de seleção. Aqui está minha solução usando Javascript:
HTML
JAVASCRIPT
O javascript garantirá que pelo menos uma caixa de seleção esteja marcada e, portanto, exigirá todo o grupo de caixas de seleção. Se a caixa de seleção marcada estiver desmarcada, serão necessárias todas as caixas de seleção novamente!
fonte
Eu tive o mesmo problema e minha solução foi a seguinte:
HTML:
JS:
https://jsfiddle.net/oywLo5z4/
fonte
Inspirado nas respostas de @thegauraw e @Brian Woodward, aqui está um pouco que eu reuni para os usuários do JQuery, incluindo uma mensagem de erro de validação personalizada:
Observe que meu formulário tem algumas caixas de seleção marcadas por padrão.
Talvez alguns de vocês assistentes JavaScript / JQuery possam aumentar ainda mais isso?
fonte
também podemos fazer isso facilmente com o html5, basta adicionar algum código jquery
Demo
HTML
Jquery
fonte
Adicionei um rádio invisível a um grupo de caixas de seleção. Quando pelo menos uma opção está marcada, o rádio também está configurado para verificar. Quando todas as opções são canceladas, o rádio também está definido para cancelar. Portanto, o formulário usa o prompt de rádio "Verifique pelo menos uma opção"
display: none
porque o rádio não pode ser focado.HTML
Javascript
CSS
https://jsfiddle.net/codus/q6ngpjyc/9/
fonte
radio
'sopacity
a 0, e setopacity
a 1 quando submetidos, para que possamos controlar se aparece contorno vermelho ou não.visibility: hidden
oudisplay: none
apenas para evitar que a usabilidade fique um pouco suja. Como os leitores de tela e outras ferramentas de acessibilidade provavelmente encontrarão o botão de opção oculto.Olá, basta usar uma caixa de texto adicional ao grupo de caixas de seleção. Ao clicar em qualquer caixa de seleção, insira valores nessa caixa de texto.
fonte
Sei que há várias soluções aqui, mas não encontrei nenhuma delas que atendesse a todos os requisitos que eu tinha:
name
para enviar problemas do Github por meio de sua API e estava usando o nomelabel[]
para atribuir rótulos em vários campos de formulário (duas listas de caixas de seleção e algumas caixas de seleção e de texto) - desde que eu pudesse ter conseguido isso sem compartilhar. o mesmo nome, mas decidi tentar e funcionou.O único requisito para este é o jQuery. Você pode combinar isso com a ótima solução do @ ewall para adicionar mensagens de erro de validação personalizadas.
fonte
Aqui está outro truque simples usando o Jquery !!
HTML
JQuery
Isso é tudo .. isso funciona porque, se nenhuma das caixas de seleção estiver marcada, nada em relação ao grupo de caixas de seleção (incluindo o nome) será publicado no servidor
fonte
Experimentar:
ou
Mais especificamente:
Ao ler dados da matriz da caixa de seleção, verifique se a matriz possui:
Nesse caso:
fonte