Eu tenho um select
que mostra inicialmente Selecionar idioma até que o usuário selecione um idioma. Quando o usuário abre a seleção, não quero mostrar uma opção Selecionar idioma , porque não é uma opção real.
Como posso conseguir isso?
Eu tenho um select
que mostra inicialmente Selecionar idioma até que o usuário selecione um idioma. Quando o usuário abre a seleção, não quero mostrar uma opção Selecionar idioma , porque não é uma opção real.
Como posso conseguir isso?
Respostas:
A solução de Kyle funcionou perfeitamente bem para mim, então fiz minha pesquisa para evitar Js e CSS, mas apenas permanecendo com HTML. Adicionar um valor de selected
ao item que queremos que apareça como cabeçalho força-o a ser mostrado em primeiro lugar como um espaço reservado. Algo como:
<option selected disabled>Choose here</option>
A marcação completa deve seguir estas linhas:
<select>
<option selected disabled>Choose here</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
<option value="5">Five</option>
</select>
Você pode dar uma olhada neste violino e aqui está o resultado:
Se você não quiser que o tipo de texto de espaço reservado apareça listado nas opções assim que um usuário clicar na caixa de seleção, basta adicionar o hidden
atributo desta forma:
<select>
<option selected disabled hidden>Choose here</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
<option value="4">Four</option>
<option value="5">Five</option>
</select>
Verifique o violino aqui e a imagem abaixo.
hidden
atributo , usado na resposta acima, é um atributo que pode ser definido em qualquer elemento HTML e geralmente (mas não necessariamente) implementado para ser equivalente à configuração display: none
com CSS.
hidden
de um option
em um select
não funciona no Safari, em ambos iOS ou Mac. Essa resposta, portanto, oferece suporte apenas parcial ao navegador.
Aqui está a solução:
<select>
<option style="display:none;" selected>Select language</option>
<option>Option 1</option>
<option>Option 2</option>
</select>
selected="true"
é inválido. Em vez disso, use selected="selected"
em (X) HTML ou apenas selected
em HTML. Parece que você confundiu selected
atributo com selected
propriedade, que é alterado assim: myOption.selected = true;
oumyOption.selected = false;
hidden
(que é "normalmente implementado em CSS" usando de display: none
qualquer maneira), usando display: none
em um option
não funciona no Safari; a opção ainda aparece.
A maneira adequada e semântica é usar uma opção de marcador de posição :
option
elemento como o primeiro filho doselect
value
= ""
para issooption
option
required
atributo aoselect
Isso forçará o usuário a selecionar outra opção para poder enviar o formulário, e os navegadores devem processar o option
conforme desejado:
Se um elemento select contiver uma opção de rótulo de espaço reservado, espera-se que o agente do usuário renderize essa opção de uma maneira que transmita que é um rótulo, em vez de uma opção válida do controle.
No entanto, a maioria dos navegadores o processará normalmente option
. Portanto, teremos que consertá-lo manualmente, adicionando o seguinte ao option
:
selected
atributo, para torná-lo selecionado por padrãodisabled
atributo, para torná-lo não selecionável pelo usuáriodisplay: none
, para ocultá-lo da lista de valoresselect > .placeholder {
display: none;
}
<select required>
<option class="placeholder" selected disabled value="">Select language</option>
<option>Option 1</option>
<option>Option 2</option>
</select>
hidden
atributo à tag de opção de espaço reservado em vez de display: none
parecer que a maioria dos navegadores móveis ignora o display: none
atributo CSS e é ainda mais semanticamente correto na minha opinião.
hidden
geralmente é implementado como display: none
nos bastidores (e a especificação sugere explicitamente isso como uma implementação "típica"). Como tal, ficaria surpreso se houvesse algum navegador - móvel ou outro - que hidden
funcionasse, mas display: none
não funcionasse. Você pode fornecer algum exemplo?
Como você não pode usar marcadores de posição atribuídos para select
tags, não acredito que haja alguma maneira de fazer exatamente o que você está pedindo com HTML / CSS puro. Você pode, no entanto, fazer algo assim:
<select>
<option disabled="disabled">Select language</option>
<option>Option 1</option>
</select>
"Selecionar idioma" aparecerá no menu suspenso, mas uma vez que outra opção for selecionada, não será possível selecioná-la novamente.
Espero que ajude.
Experimente isto:
<div class="selectSelection">
<select>
<option>Do not display</option>
<option>1</option>
<option>1</option>
</select>
</div>
No CSS:
.selectSelection option:first-child{
display:none;
}
Eu tenho uma solução com um intervalo exibido acima do select até que uma seleção seja feita. O intervalo exibe a mensagem padrão e, portanto, não está na lista de proposições:
HTML:
<span id="default_message_overlay">Default message</span>
<select id="my_select">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
CSS:
#default_message_overlay {
position: absolute;
display: block;
width: 120px;
color: grey;
}
select {
width: 150px;
}
Javascript (com JQuery):
$(document).ready(function() {
// No selection at start
$('#my_select').prop("selectedIndex", -1);
// Set the position of the overlay
var offset = $('#my_select').offset();
offset.top += 3;
offset.left += 3;
$('#default_message_overlay').offset(offset);
// Remove the overlay when selection changes
$('#my_select').change(function() {
if ($(this).prop("selectedIndex") != -1) {
$('#default_message_overlay').hide();
}
});
});
Eu fiz um jsfiddle para demonstração . Testado com Firefox e IE8.
span
usar legend
e isso seria perfeito oulabel
pointer-events: none
em seu intervalo para permitir a passagem de cliques para selecionar.
<option value="" id="ddl" name="prop" style="display:none;" disabled selected>chose something </option>
você pode, é claro, mover o css para um arquivo css se quiser e colocar um script para capturar o esc
botão para selecionar o desativado novamente. Ao contrário das outras respostas semelhantes que coloquei value=""
, se você enviar o (s) valor (es) da sua lista de seleção com um formulário, ela não conterá "escolheu algo". Em asp.net mvc 5 enviado como json compilado com var obj = { prop:$('#ddl').val(),...};
e JSON.stringify(obj);
o valor de prop será nulo.
Op1:
$("#MySelectid option").each(function () {
if ($(this).html() == "text to find") {
$(this).attr("selected", "selected");
return;
}
});
Op2:
$('#MySelectid option')
.filter(function() { return $.trim( $(this).text() ) == 'text to find'; }).attr('selected','selected');