Como posso verificar se já existe uma opção no select by JQuery

169

Como posso verificar se já existe uma opção no select by JQuery?

Quero adicionar dinamicamente opções ao select e, portanto, preciso verificar se a opção já existe para evitar duplicação.

Billy
fonte

Respostas:

333

Isso avalia como verdadeiro se ele já existe:

$("#yourSelect option[value='yourValue']").length > 0;
Tamas Czinege
fonte
5
Atualizando para o Jquery 1.6 +, inclua yourValue entre aspas
Bob
1
Sim. As cotações são muito importantes.
Bobetko
2
Funciona para mim no jquery 1.7.1 sem incluir o seu valor entre aspas
Mathias F
Como o caso de ignorar ou toLowerCase pode ser implementado na solução acima? Isso exigiria $ .each para a lista suspensa?
quer
1
se queremos implementar a correspondência que diferencia maiúsculas de minúsculas, o que precisamos fazer? usar a função $ .each simples?
Chaudhry Waqas
21

Outra maneira de usar o jQuery:

var exists = false; 
$('#yourSelect  option').each(function(){
  if (this.value == yourValue) {
    exists = true;
  }
});
HaMinh Nguyen
fonte
6
-1 Você está basicamente fazendo o loop sozinho, em vez de deixar o jQuery fazer isso como todas as outras respostas. Embora isso funcione, está reinventando a roda.
Peter
14
não tenho certeza se vale -1. isso mostra explicitamente o processo, o que pode ser bom para iniciantes. Certamente não é a melhor resposta, mas é válida.
roberthuttinger
1
E alguns gostam da abordagem manual, como eu. Isso também combina a etapa de adicionar o booleano, em vez de produzir o 0 ou 1 como o outro faz e ter que convertê-lo. Eu digo que ambas as abordagens são boas porque você tem que fazer 2 etapas, de qualquer maneira. Isso parece mais visível para o processo, para mim, e menos propenso a erros por não julgar o tamanho do espaço em branco, por exemplo, como o .lengthfaria.
vapcguy
3
Mais um para estes, também você não precisa se preocupar para caracteres em yourValue
Fabio C.
1
Esta e a resposta de alnort29 são na verdade a melhor maneira de verificar um valor existente, se você não souber o que é "seuValor" (por exemplo, se for uma entrada do usuário). Construir uma única string apenas para permitir que o "jQuery faça" exigiria a higienização de entrada e você terminaria com práticas de código que assombram o SQL por décadas. Portanto, um -1 é completamente injustificado. A questão ainda afirma que eles desejam inserir valores "dinamicamente". Não remende sua corda dinamicamente. Você também não seleciona 1 dos usuários em que password = "'+ string +'" ', não é?
Aaa
20
if ( $("#your_select_id option[value=<enter_value_here>]").length == 0 ){
  alert("option doesn't exist!");
}
Seb
fonte
2
está faltando um colchete de fechamento "opção [value = <enter_value_here>]"
KB.
17
var exists = $("#yourSelect option")
               .filter(function (i, o) { return o.value === yourValue; })
               .length > 0;

Isso tem a vantagem de escapar automaticamente do valor para você, o que facilita muito o tratamento de aspas aleatórias no texto.

alnorth29
fonte
2

Não funciona, você deve fazer o seguinte:

if ( $("#your_select_id option[value='enter_value_here']").length == 0 ){
  alert("option doesn't exist!");
}
Mike
fonte
1

Isso me ajuda:

  var key = 'Hallo';

   if ( $("#chosen_b option[value='"+key+"']").length == 0 ){
   alert("option not exist!");

    $('#chosen_b').append("<option value='"+key+"'>"+key+"</option>");
    $('#chosen_b').val(key);
   $('#chosen_b').trigger("chosen:updated");
                         }
  });
Sulung Nugroho
fonte
0

Eu tive uma questão semelhante. Em vez de executar a pesquisa através do dom toda vez que o loop para o controle select eu salvei o elemento jquery select em uma variável e fiz o seguinte:

function isValueInSelect($select, data_value){
    return $($select).children('option').map(function(index, opt){
        return opt.value;
    }).get().includes(data_value);
}
codeasaurus
fonte
0

Embora a maioria das outras respostas tenha funcionado para mim, usei .find ():

if ($("#yourSelect").find('option[value="value"]').length === 0){
    ...
}
Strabek
fonte