Eu tenho uma caixa de seleção:
<select id="selectBox">
<option value="0">Number 0</option>
<option value="1">Number 1</option>
<option value="2">Number 2</option>
<option value="3">Number 3</option>
<option value="4">Number 4</option>
<option value="5">Number 5</option>
<option value="6">Number 6</option>
<option value="7">Number 7</option>
</select>
Gostaria de definir uma das opções como "selecionada" com base no índice selecionado.
Por exemplo, se estou tentando definir "Número 3", estou tentando o seguinte:
$('#selectBox')[3].attr('selected', 'selected');
Mas isso não funciona. Como posso definir uma opção como selecionada com base em seu índice usando o jQuery?
Obrigado!
jquery
jquery-selectors
BoltClock
fonte
fonte
Respostas:
NOTA : a resposta depende do jQuery 1.6.1+
Obrigado pelo comentário,
.get
não funcionará, pois retorna um elemento DOM, não um jQuery. Lembre-se de que a.eq
função também pode ser usada fora do seletor, se você preferir.Você também pode ser mais conciso / legível se quiser usar o valor , em vez de depender da seleção de um índice específico :
Nota:
.val(3)
funciona bem para este exemplo, mas os valores não numéricos devem ser cadeias, por isso escolhi uma cadeia por consistência.(por exemplo,
<option value="hello">Number3</option>
requer que você use.val("hello")
)fonte
.prop()
melhor que.attr()
.Isso também pode ser útil, então pensei em adicioná-lo aqui.
Se você deseja selecionar um valor com base no valor do item e não no índice desse item, faça o seguinte:
Sua lista de seleção:
O jquery:
O item selecionado seria "Número 2" agora.
fonte
.attr('selected', 'selected')
não deve ser usado várias vezes na mesma seleção, pois alguns navegadores podem ficar confusos (em alguns casos, eles começam a marcar vários itens no domínio comoselected=selected"
. Se você precisar alterar o valor selecionado com mais frequência (por exemplo, em um botão clique uso).prop('selected', true)
como sugerido por Marc -. é só tinha uma dor muito - e desperdício de tempo - por causa desta questão!Tente isso:
fonte
Ainda mais simples:
fonte
quando você deseja selecionar as principais formas de seleção de conjuntos, pode usar
$('#select option').removeAttr('selected');
para remover as seleções anteriores.fonte
O que é importante entender é que,
val()
para umselect
elemento, retorna o valor da opção selecionada, mas não o número de elementos, como aconteceselectedIndex
no javascript.Para selecionar a opção,
value="7"
você pode simplesmente usar:Para desmarcar a opção, use uma matriz vazia:
E é claro que você pode selecionar várias opções *:
* No entanto, para selecionar várias opções, seu
<select>
elemento deve ter umMULTIPLE
atributo, caso contrário, não funcionará.fonte
Sempre tive problemas com prop ('selected'), o seguinte sempre funcionou para mim:
fonte
Tente o seguinte:
Eventualmente, acione um evento .change:
fonte
Espero que isso possa ajudar também
fonte
selecione a terceira opção
Exemplo no jsfiddle
fonte
NB:
está incorreto, a deferência da matriz fornece o objeto dom, não um objeto jquery, portanto falhará com um TypeError, por exemplo, no FF com: "$ ('# selectBox option') [3] .attr () não é uma função . "
fonte
Para esclarecer as respostas de Marc e John Kugelman, você pode usar:
get()
não funcionará se usado da maneira especificada porque obtém o objeto DOM, não um objeto jQuery, portanto a solução a seguir não funcionará:eq()
Obtém filtra o jQuery definido como o do elemento com o índice especificado. É mais claro que$($('#selectBox option').get(3))
. Não é tão eficiente assim.$($('#selectBox option')[3])
é mais eficiente (veja o caso de teste ).Você realmente não precisa do objeto jQuery. Isto irá fazer o truque:
http://api.jquery.com/get/
http://api.jquery.com/eq/
Um outro ponto de vital importância:
O atributo "selecionado" não é como você especifica um botão de opção selecionado (pelo menos no Firefox e Chrome). Use o atributo "marcado":
O mesmo vale para as caixas de seleção.
fonte
Na 1.4.4, você obtém um erro: $ ("# selectBox option") [3] .attr não é uma função
Isso funciona:
$('#name option:eq(idx)').attr('selected', true);
Onde
#name
está o ID de seleção eidx
é o valor da opção que você deseja selecionar.fonte
O atributo javascript puro selectedIndex é o caminho certo, pois é javascript puro e funciona em vários navegadores:
Aqui está uma demonstração do jsfiddle com duas listas suspensas, usando uma para definir a outra:
Você também pode chamar isso antes de alterar o selectedIndex se o que você deseja é o atributo "selected" na tag de opção ( aqui está o violino ):
fonte
fonte
Costumo usar trigger ('change') para fazê-lo funcionar
Exemplo com id select = selectA1 e position_index = 0 (primeira opção em select):
fonte
Ao usar o acima, eu continuava recebendo erros no webkit (Chrome) dizendo:
"TypeError não capturado: o objeto # não possui o método 'attr'"
Essa sintaxe interrompe esses erros.
fonte
Selecione o item com base no valor na lista de seleção (especialmente se os valores da opção tiverem um espaço ou um caractere estranho) simplesmente fazendo o seguinte:
Além disso, se você tiver um menu suspenso (em oposição a uma seleção múltipla), poderá fazer um
break;
para não fazer com que o primeiro valor encontrado seja substituído.fonte
Eu preciso de uma solução que não tenha valores codificados no arquivo js; usando
selectedIndex
. A maioria das soluções fornecidas falhou em um navegador. Isso parece funcionar no FF10 e IE8 (alguém pode testar em outras versões)fonte
Se você quiser apenas selecionar um item com base em uma propriedade específica de um item, a opção jQuery do tipo [prop = val] obterá esse item. Agora não me importo com o índice, apenas queria o item por seu valor.
fonte
Eu enfrentei o mesmo problema. Primeiro você precisa passar pelos eventos (ou seja, qual evento está acontecendo primeiro).
Por exemplo:
O primeiro evento está gerando caixa de seleção com opções.
O segundo evento está selecionando a opção padrão usando qualquer função como val () etc.
Você deve garantir que o segundo evento ocorra após o primeiro evento .
Para conseguir isso, use duas funções, digamos generateSelectbox () (para gerar caixa de seleção) e selectDefaultOption ()
Você precisa garantir que selectDefaultOption () seja chamado somente após a execução de generateSelectbox ()
fonte
Você também pode iniciar vários valores se sua caixa de seleção for uma multiplicação:
fonte
você pode definir o valor da variável de opção de seleção dinamicamente e a opção será selecionada. Você pode tentar seguir o código
código:
CÓDIGO HTML:
fonte
Em breve:
$("#selectBox").attr("selectedIndex",index)
onde índice é o índice selecionado como número inteiro.
fonte