Como posso verificar se um usuário selecionou algo de um <select>
campo no HTML5?
Vejo <select>
que não suporta o novo required
atributo ... tenho que usar JavaScript então? Ou há algo que estou perdendo? : /
Como posso verificar se um usuário selecionou algo de um <select>
campo no HTML5?
Vejo <select>
que não suporta o novo required
atributo ... tenho que usar JavaScript então? Ou há algo que estou perdendo? : /
Respostas:
Obrigatório : mantenha o primeiro valor vazio - trabalhos necessários em valores vazios
Pré - requisitos : DOCTYPE html5 correto e um campo de entrada nomeado
<select name="somename" required>
<option value="">Please select</option>
<option value="one">One</option>
</select>
Conforme a documentação (a lista e o negrito são meus)
O atributo necessário é um atributo booleano.
Quando especificado, o usuário deverá selecionar um valor antes de enviar o formulário.Se um elemento selecionado
- tem um atributo obrigatório especificado,
- não possui um atributo múltiplo especificado,
- e possui um tamanho de exibição 1 (não possui SIZE = 2 ou mais - omita-o se não for necessário);
- e se o valor do primeiro elemento da opção na lista de opções do elemento selecionado (se houver) for a sequência vazia (ou seja, presente como
value=""
),- e o nó pai desse elemento de opção é o elemento de seleção (e não um elemento do grupo de opções),
essa opção é a opção de rótulo do espaço reservado do elemento de seleção.
O <select>
elemento suporta o required
atributo, conforme a especificação:
Qual navegador não respeita isso?
(É claro que você precisa validar no servidor de qualquer maneira, pois não pode garantir que os usuários tenham o JavaScript ativado.)
Você pode usar o selected
atributo para o elemento option para selecionar uma opção por padrão. Você pode usar o required
atributo para o elemento select para garantir que o usuário selecione algo.
Em Javascript, você pode verificar a selectedIndex
propriedade para obter o índice da opção selecionada ou verificar a value
propriedade para obter o valor da opção selecionada.
De acordo com a especificação HTML5, selectedIndex
"retorna o índice do primeiro item selecionado, se houver, ou -1 se não houver um item selecionado. E value
" retorna o valor do primeiro item selecionado, se houver, ou a sequência vazia, se houver nenhum item selecionado. "Então, se selectedIndex = -1, você sabe que eles não selecionaram nada.
<button type="button" onclick="displaySelection()">What did I pick?</button>
<script>
function displaySelection()
{
var mySelect = document.getElementById("someSelectElement");
var mySelection = mySelect.selectedIndex;
alert(mySelection);
}
</script>
-1
. Desculpe, eu não esclareço nos comentários primeiro.
Sim, está funcionando:
<select name="somename" required>
<option value="">Please select</option>
<option value="one">One</option>
</select>
você deve manter a primeira opção em branco.
<form action="">
<select required>
<option selected disabled value="">choose</option>
<option value="red">red</option>
<option value="yellow">yellow</option>
<option value="green">green</option>
<option value="grey">grey</option>
</select>
<input type="submit">
</form>
Coloque o valor do primeiro item da caixa de seleção em branco.
Então, quando você publica o FORM, obtém um valor em branco e, dessa maneira, você saberia que o usuário não selecionou nada no menu suspenso.
<select name="user_role" required>
<option value="">-Select-</option>
<option value="User">User</option>
<option value="Admin">Admin</option>
</select>
Você precisa definir o value
atributo de option
para a sequência vazia:
<select name="status" required>
<option selected disabled value="">what's your status?</option>
<option value="code">coding</option>
<option value="sleep">sleeping</option>
</select>
select
irá retornar o value
do selecionado option
para o servidor quando o usuário pressiona submit
no form
. Um vazio value
é igual a uma text
entrada vazia -> aumentando a required
mensagem.
O atributo value especifica o valor a ser enviado para um servidor quando um formulário é enviado.
tente isso, isso vai funcionar, eu tentei isso e isso funciona.
<!DOCTYPE html>
<html>
<body>
<form action="#">
<select required>
<option value="">None</option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<input type="submit">
</form>
</body>
</html>
Funciona perfeitamente se o valor da primeira opção for nulo. Explicação: O HTML5 lerá um valor nulo no envio do botão. Se não for nulo (atributo value), presume-se que o valor selecionado não seja nulo; portanto, a validação teria funcionado, ou seja, verificando se há dados na tag de opção. Portanto, não produzirá o método de validação. No entanto, acho que o outro lado fica claro, se o atributo value estiver definido como null, ou seja, (value = ""), o HTML5 detectará um valor vazio na primeira ou melhor, na opção selecionada padrão, fornecendo a mensagem de validação. Obrigado por perguntar. Feliz por ajudar. Fico feliz em saber se eu fiz.
No html5, você pode usar a expressão completa:
<select required="required">
Não sei por que a expressão curta não funciona, mas tente esta. Isso vai resolver.
Tente isto
<select>
<option value="" style="display:none">Please select</option>
<option value="one">One</option>
</select>
Você também pode fazer isso dinamicamente com o JQuery
Definir obrigatório
$("#select1").attr('required', 'required');
Remover necessário
$("#select1").removeAttr('required');
selectedIndex
.