Verifique se a opção está selecionada com jQuery, se não selecionar um padrão

207

Usando o jQuery, como você verifica se existe uma opção selecionada em um menu de seleção e, se não, atribui uma das opções conforme selecionadas.

(A seleção é gerada com um labirinto de funções PHP em um aplicativo que acabei de herdar, portanto, essa é uma solução rápida enquanto passo a cabeça em torno delas :)

meleyal
fonte

Respostas:

270

Embora não tenha certeza do que você deseja realizar, esse código funcionou para mim.

<select id="mySelect" multiple="multiple">
  <option value="1">First</option>
  <option value="2">Second</option>
  <option value="3">Third</option>
  <option value="4">Fourth</option>
</select>

<script type="text/javascript"> 
$(document).ready(function() {
  if (!$("#mySelect option:selected").length) {
    $("#mySelect option[value='3']").attr('selected', 'selected');
  }
});
</script>
Joe Lencioni
fonte
86
A seleção seria mais fácil de ler assim:$("#mySelect").val(3);
Jørn Schou-Rode
6
Isso me colocou no caminho certo, mas eu precisava fazer isso: $("#mySelect option")[2]['selected'] = true; descobri isso depois de investigar as estruturas de objetos no Firebug.
Semperos
28
A partir do jQuery 1.6, você pode definir a propriedade diretamente. $("#mySelect").prop("selectedIndex", 2)
Gradbot
1
A versão .val (x) não funciona no Internet Explorer 8, portanto, o @gradbot está correto, pois funciona em todos os navegadores.
Sorcy 18/07/12
30

Não é necessário usar o jQuery para isso:

var foo = document.getElementById('yourSelect');
if (foo)
{
   if (foo.selectedIndex != null)
   {
       foo.selectedIndex = 0;
   } 
}
FlySwat
fonte
58
O OP declarou: "Usando jQuery ...", então parece supérfluo ignorar isso, não?
11119 BryanH #
13
Pessoalmente, se eu fizer uma pergunta específica, gostaria de obter a resposta para a pergunta em vez de uma maneira diferente.
22611 vitto
18
Às vezes, a resposta que você procura não é a que você espera.
MrBoJangles
5
Independentemente disso, ele solicitou o jQuery, e a resposta do jQuery é um pouco mais fácil de entender, especialmente se alguém não entender o JavaScript básico.
shmeeps 22/07
6
Excelente maneira de fazer isso, às vezes o javascript básico pode ser bastante útil!
Hallaghan 31/08
13

Essa pergunta é antiga e tem muitas visualizações, então vou lançar algumas coisas que ajudarão algumas pessoas, tenho certeza.

Para verificar se um elemento de seleção possui algum item selecionado:

if ($('#mySelect option:selected').length > 0) { alert('has a selected item'); }

ou para verificar se um select não tem nada selecionado:

if ($('#mySelect option:selected').length == 0) { alert('nothing selected'); }

ou se você estiver em um loop de algum tipo e quiser verificar se o elemento atual está selecionado:

$('#mySelect option').each(function() {
    if ($(this).is(':selected')) { .. }
});

para verificar se um elemento não está selecionado enquanto estiver em um loop:

$('#mySelect option').each(function() {
    if ($(this).not(':selected')) { .. }
});

Estas são algumas das maneiras de fazer isso. O jQuery tem muitas maneiras diferentes de realizar a mesma coisa; portanto, você geralmente escolhe qual parece ser o mais eficiente.

Gavin
fonte
"not" não funcionou para mim $ ('# opção mySelect'). each (function () {if ($ (this) .not (': selected')) {..}}); Então, uma negação usada é como se (! $ (This) .is (': selected')) {..} Navegador: Chrome; Versão Jquery: 3.1.1
Anil Kumar
12

A resposta de lencioni é o que eu recomendaria. Você pode alterar o seletor da opção ('#mySelect option:last')para selecionar a opção com um valor específico usando " #mySelect option[value='yourDefaultValue']". Mais sobre seletores .

Se você estiver trabalhando extensivamente com listas de seleção no cliente, consulte este plugin: http://www.texotela.co.uk/code/jquery/select/ . Dê uma olhada na fonte, se você quiser ver mais alguns exemplos de como trabalhar com listas de seleção.

Alex Pendleton
fonte
9

Aqui está minha função alterando a opção selecionada. Funciona para o jQuery 1.3.2

function selectOption(select_id, option_val) {
    $('#'+select_id+' option:selected').removeAttr('selected');
    $('#'+select_id+' option[value='+option_val+']').attr('selected','selected');   
}
sata
fonte
7
<script type="text/javascript"> 
$(document).ready(function() {
  if (!$("#mySelect option:selected").length)
   $("#mySelect").val( 3 );

});
</script>
Ram Prasad
fonte
3

Fácil! O padrão deve ser a primeira opção. Feito! Isso levaria você a um JavaScript discreto, porque o JavaScript não é necessário :)

JavaScript discreto

Martin Labuschin
fonte
3

Eu já me deparei com o plug-in texotela mencionado, que me permite resolvê-lo assim:

$(document).ready(function(){
    if ( $("#context").selectedValues() == false) {
    $("#context").selectOptions("71");
    }
});
meleyal
fonte
2

Veja o selectedIndex do selectelemento. BTW, isso é uma coisa simples e DOM, não específica do JQuery.

Hank Gay
fonte
2

Este foi um script rápido que achei que funcionou ... O resultado é atribuído a um rótulo.

$(".Result").html($("option:selected").text());
Joel
fonte
1

Vocês estão fazendo demais para selecionar. Basta selecionar por valor:

$("#mySelect").val( 3 );
giagejoe
fonte
2
Isso está selecionando a opção 3, independentemente de outra opção já estar selecionada.
Jordan Ryan Moore
1
if (!$("#select").find("option:selected").length){
  //
}
Avinash Saini
fonte
1

Encontrei uma boa maneira de verificar se a opção está selecionada e selecione um padrão quando não estiver.

    if(!$('#some_select option[selected="selected"]').val()) {
        //here code if it HAS NOT selected value
        //for exaple adding the first value as "placeholder"
        $('#some_select option:first-child').before('<option disabled selected>Wybierz:</option>');
    }

Se #some_select não tiver a opção selecionada padrão, então .val () será indefinido

Marcin Bąk
fonte
0
$("option[value*='2']").attr('selected', 'selected');
// 2 for example, add * for every option
user420944
fonte
0
$("#select_box_id").children()[1].selected

Esta é outra maneira de verificar se uma opção está selecionada ou não no jquery. Isso retornará booleano (verdadeiro ou falso).

[1] é o índice da opção da caixa de seleção

Taimoor Changaiz
fonte
0

Altere o evento na caixa de seleção para disparar e, uma vez ativado, basta puxar o atributo id da opção selecionada: -

$("#type").change(function(){
  var id = $(this).find("option:selected").attr("id");

  switch (id){
    case "trade_buy_max":
      // do something here
      break;
  }
});
Akash Deep Singhal
fonte
0

Eu estava apenas procurando por algo semelhante e encontrei o seguinte:

$('.mySelect:not(:has(option[selected])) option[value="2"]').attr('selected', true);

Ele localiza todos os menus de seleção na classe que ainda não têm uma opção selecionada e seleciona a opção padrão ("2" neste caso).

Tentei usar em :selectedvez de [selected], mas isso não funcionou porque algo sempre é selecionado, mesmo que nada tenha o atributo

Steven Schoch
fonte
0

Se você precisar verificar explicitamente cada opção para ver se alguma tem o atributo "selecionado", você pode fazer isso. Caso contrário, usando option:selectedvocê obterá o valor para a primeira opção padrão.

var viewport_selected = false;      
$('#viewport option').each(function() {
    if ($(this).attr("selected") == "selected") {
        viewport_selected = true;
    }
});
Zeman
fonte