Como fazer a primeira opção de <selecionar> selecionada com jQuery


548

Como faço para selecionar a primeira opção com jQuery?

<select id="target">
  <option value="1">...</option>
  <option value="2">...</option>
</select>

Respostas:


956
$("#target").val($("#target option:first").val());

364
Deve-se notar que isso é mais fácil com $ ("# target") [0] .selectedIndex = 0;
David Andres

17
Ele funciona, mas é baseado em 1º elemento de valor , se 1º elemento contém valor vazio, ele irá selecionar elemento mais próximo com o valor
evilReiko

2
Parece funcionar muito bem, exceto o IE6. Incerto de 7-8, funciona em 9.
Nicholi

3
Eu retrocedi minha declaração anterior, estava me adiantando. $ ("# target"). val ("opção: primeiro"); funciona quase todos os lugares, exceto o IE6 $ ("target"). val ($ ("# option option: first"). val ()); funcionará no IE6, porque você está literalmente procurando o primeiro valor e inserindo-o como valor do destino. Duas pesquisas de identificação em vez de uma.
Nicholi

2
E é realmente necessário para o IE6, 7 e 8. Considerando que .val ('opção: primeiro') funciona no IE9 (e Safari e Firefox e Chrome e Opera).
Nicholi

178

Você pode tentar isso

$("#target").prop("selectedIndex", 0);

2
Isso não funciona corretamente em todos os casos. Eu tenho um pai / filho em cascata suspensos. Selecione o pai nº 1, o filho nº 1, selecione o pai nº 2 o filho nº 2. Sempre que eles selecionam um novo pai, ele deve definir o filho correspondente de volta para a primeira opção. Esta solução não faz isso. Ele deixa o menu filho "pegajoso". Consulte a solução option.prop ('selected', false) / option: first.prop ('selected', 'selected') nesta pergunta para obter a resposta que funciona em mais cenários.
Lance Cleveland

isso não aciona o evento onChange. Pelo menos em cromo.
Tomasz Mularczyk

Obrigado! Esta é a primeira resposta na lista de respostas que funcionou para mim.
Casey Crookston

6
@Tomasz$("#target").prop("selectedIndex", 0).change();
mplungjan

@Romesh como posso definir a base selectedIndex no valor?
Junior Frogie

111
// remove "selected" from any options that might already be selected
$('#target option[selected="selected"]').each(
    function() {
        $(this).removeAttr('selected');
    }
);


// mark the first option as selected
$("#target option:first").attr('selected','selected');

1
Boa segunda abordagem. Por favor, adicione o valor do atributo selecionado. Por exemplo, attr ("selecionado", "selecionado"). Sem esse parâmetro extra, a seleção não é feita.
David Andres

@ EggPavlikhin - Acabei de editar a resposta para incluir o código JQuery para remover o sinalizador "selecionado" de qualquer opção que já possa ter sido selecionada. Agora a resposta é :) correta
jmort253

20
Não há necessidade da eachfunção, deve ser: $('#target option[selected="selected"]').removeAttr('selected')também agora deve ser usada com removePrope em propvez disso.
vsync

Uma versão mais completa da resposta de James Lee Baker em outra parte desta questão, embora adicione ciclos de computação que podem não ser necessários se a interface for bem gerenciada.
Lance Cleveland

65

Quando você usa

$("#target").val($("#target option:first").val());

isso não funcionará no Chrome e Safari se o valor da primeira opção for nulo.

eu prefiro

$("#target option:first").attr('selected','selected');

porque pode funcionar em todos os navegadores.


3
Você também precisa "desmarcar" qualquer elemento selecionado anteriormente para que isso funcione em mais casos. Veja a resposta de James Lee Baker para obter detalhes.
Lance Cleveland

44

Alterar o valor da entrada de seleção ou ajustar o atributo selecionado pode substituir a propriedade padrão selectedOptions do elemento DOM, resultando em um elemento que pode não ser redefinido corretamente em um formulário ao qual o evento de redefinição foi chamado.

Use o método prop do jQuery para limpar e definir a opção necessária:

$("#target option:selected").prop("selected", false);
$("#target option:first").prop("selected", "selected");

3
Perfeito. Tenho menus suspensos em cascata. Quando um usuário seleciona a opção pai 2 e a opção filho 3, não quero que isso "fique". Em outras palavras, o usuário seleciona o pai nº 1 e, em seguida, seleciona novamente o pai nº 2. Quando isso acontece, quero que o menu filho seja redefinido para a primeira opção (que é "Qualquer" no meu caso). Todas as outras soluções aqui falham no Firefox v19 e Chrome no Linux.
Lance Cleveland

33
$("#target")[0].selectedIndex = 0;

1
Isso não funcionará nos casos em que um menu suspenso tiver um item pré-selecionado. Veja meus comentários sobre a resposta selecionada para obter detalhes.
Lance Cleveland

21

Um ponto sutil que acho que descobri sobre as principais respostas votadas é que, embora elas alterem corretamente o valor selecionado, elas não atualizam o elemento que o usuário vê (somente quando clicarem no widget, elas verão uma verificação ao lado do elemento atualizado).

O encadeamento de uma chamada .change () até o final também atualizará o widget da interface do usuário.

$("#target").val($("#target option:first").val()).change();

(Observe que notei isso ao usar o jQuery Mobile e uma caixa na área de trabalho do Chrome, portanto, esse pode não ser o caso em todos os lugares).


O encadeamento de uma chamada .change () até o final também atualizará o widget da interface do usuário.
Codemirror

17

Se você desativou as opções, pode não adicionar ([desativado]) para impedir a seleção delas, o que resulta no seguinte:

$("#target option:not([disabled]):first").attr('selected','selected')

1
Bom argumento sobre as opções desativadas. Boa adição às respostas apresentadas!
Lance Cleveland

16

Outra maneira de redefinir os valores (para vários elementos selecionados) poderia ser esta:

$("selector").each(function(){

    /*Perform any check and validation if needed for each item */

    /*Use "this" to handle the element in javascript or "$(this)" to handle the element with jquery */

    this.selectedIndex=0;

});

4
+1 é na verdade uma boa resposta, mas você poderia torná-la mais específica ao domínio da pergunta; em vez de $("selector")você poderia ter escrito$('#target')
Ja͢ck


7
$('#newType option:first').prop('selected', true);

Isso funciona apenas se ainda não houver opções selecionadas. Veja a resposta de James Lee Baker.
Webars

6

Descobri que apenas a configuração de attr selected não funciona se já houver um atributo selecionado. O código que eu uso agora desabilita primeiro o atributo selecionado e depois seleciona a primeira opção.

$('#target').removeAttr('selected').find('option:first').attr('selected', 'selected');

Isso funciona bem e é muito semelhante à resposta de James Lee Baker, citada em outra parte desta questão. Gosto da outra resposta com a opção: selected e option: first como a execução da opção: first provavelmente será mais rápida (em termos de computação) do que find ().
Lance Cleveland

5

Embora a função each provavelmente não seja necessária ...

$('select').each(function(){
    $(this).find('option:first').prop('selected', 'selected');
});

funciona para mim.


5

Aqui está como eu faria isso:

$("#target option")
    .removeAttr('selected')
    .find(':first')     // You can also use .find('[value=MyVal]')
        .attr('selected','selected');

1
Isso funciona bem e é muito semelhante à resposta de James Lee Baker, citada em outra parte desta questão. Gosto da outra resposta com a opção: selected e option: first como a execução da opção: first provavelmente será mais rápida (em termos de computação) do que find ().
Lance Cleveland

2

Só funcionou para mim usando um gatilho ('change') no final, assim:

$("#target option:first").attr('selected','selected').trigger('change');

2

Se você usar a primeira opção como padrão, como

<select>
    <option value="">Please select an option below</option>
    ...

então você pode apenas usar:

$('select').val('');

É simples e agradável.



1

Na parte de trás da resposta de James Lee Baker, prefiro esta solução, pois elimina a dependência do suporte do navegador para: first: selected ...

$('#target').children().prop('selected', false);
$($('#target').children()[0]).prop('selected', 'selected');

1

Para mim, só funcionou quando adicionei o seguinte código:

.change();

Para mim, só funcionou quando adicionei o seguinte código: Como queria "redefinir" o formulário, ou seja, selecione todas as primeiras opções de todas as seleções do formulário, usei o seguinte código:

$('form').find('select').each(function(){ $(this).val($("select option:first").val()); $(this).change(); });


1

Usar:

$("#selectbox option:first").val()

Por favor, encontre o trabalho simples neste JSFiddle .


Que tal as posições 15, 25 ou com texto específico? : D
Marcelo Agimóvel

Chamar .val()apenas obtém o valor da primeira opção na lista. Na verdade, ele não seleciona (torna selecionado) a primeira opção, como foi solicitado na pergunta original.
Funka

1

Para mim, só funcionou quando adicionei a seguinte linha de código

$('#target').val($('#target').find("option:first").val());


0

Se você estiver armazenando o objeto jQuery do elemento select:

var jQuerySelectObject = $("...");

...

jQuerySelectObject.val(jQuerySelectObject.children().eq(0).val());

0

Verifique esta melhor abordagem usando jQuery com ECMAScript 6 :

$('select').each((i, item) => {
  var $item = $(item);
  $item.val($item.find('option:first').val()); 
});

0

Você pode selecionar qualquer opção dropdownusando-a.

// 'N' can by any number of option.  // e.g.,  N=1 for first option
$("#DropDownId").val($("#DropDownId option:eq(N-1)").val()); 

0

$('select#id').val($('#id option')[index].value)

Substitua o ID por um ID de tag de seleção específico e indexe pelo elemento específico que você deseja selecionar.

ie

<select class="input-field" multiple="multiple" id="ddlState" name="ddlState">
                                        <option value="AB">AB</option>
                                        <option value="AK">AK</option>
                                        <option value="AL">AL</option>
</select>

Então, aqui para a seleção do primeiro elemento, usarei o seguinte código:

$('select#ddlState').val($('#ddlState option')[0].value)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.