JQuery tarafından seçilen bir seçeneğin mevcut olup olmadığını nasıl kontrol edebilirim?


169

JQuery tarafından seçilen bir seçeneğin mevcut olup olmadığını nasıl kontrol edebilirim?

Dinamik olarak seçme seçenekleri eklemek istiyorum ve bu nedenle çoğaltmayı önlemek için seçeneğin zaten var olup olmadığını kontrol etmek gerekir.

Yanıtlar:


333

Bu zaten varsa doğru olarak değerlendirilir:

$("#yourSelect option[value='yourValue']").length > 0;

5
Jquery 1.6 + 'ya yükseltme, değerinizi tırnak içine alın
Bob

1
Evet. Alıntılar çok önemlidir.
bobetko

2
Tırnak içinde yourValue çevreleyen olmadan jquery 1.7.1 benim için çalışıyor
Mathias F

Yukarıdaki çözümde case veya toLowerCase nasıl göz ardı edilebilir? Bu, açılır liste için $ .each gerektirir mi?
Ben

1
büyük / küçük harfe duyarlı eşleştirme uygulamak istiyorsak ne yapmalıyız? Basit $ .each işlevini kullan?
Chaudhry Waqas

21

JQuery kullanarak başka bir yol:

var exists = false; 
$('#yourSelect  option').each(function(){
  if (this.value == yourValue) {
    exists = true;
  }
});

6
-1 Temelde jQuery'nin diğer tüm cevaplar gibi yapmasına izin vermek yerine döngüyü kendiniz yapıyorsunuz. Bu işe yarayacak olmasına rağmen, tekerleği yeniden icat ediyor.
Peter

14
-1 değerinde olduğundan emin değilim. bu açıkça yeni başlayanlar için iyi olabilecek süreci göstermektedir. Kesinlikle en iyi cevap değil, ama geçerli bir cevap.
roberthuttinger

1
Bazıları da benim gibi manuel yaklaşımı seviyor. Bu aynı zamanda, booleanı oraya ekleme işlemini, diğerinin yaptığı gibi 0 veya 1 üretmek ve dönüştürmek zorunda kalmadan birleştirir. Her iki yaklaşımın da iyi olduğunu söylüyorum, çünkü her iki şekilde de 2 adım atmanız gerekiyor. Bu, süreç için bana göre daha görünür ve örneğin boşlukların uzunluğunu yargılamadığı gibi hataya daha az yatkın görünüyor .length.
vapcguy

3
Ayrıca bunlar için bir tane, ayrıca değerinizdeki karakterler için endişelenmenize gerek yok
Fabio C.

1
Bu ve alnort29'un cevabı aslında "değeriniz" in ne olduğunu bilmiyorsanız (örneğin, kullanıcı girişi ise) mevcut bir değeri kontrol etmenin en iyi yoludur. Sadece "jQuery bunu yapmak" için tek bir dize oluşturmak giriş sanitizasyon yapmak gerektirir ve onlarca yıldır perili SQL kod uygulamaları ile sonuçlanır. Yani -1 tamamen yersizdir. Soru, değerleri "dinamik olarak" eklemek istediklerini bile ifade ediyor. Dizenizi dinamik olarak bir araya getirmeyin. Ayrıca parola = "'+ string +'" 'olan kullanıcılardan' 1'i seçmezsiniz, değil mi?
Aaa

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

2
kapanış köşeli parantezi eksik "option [value = <enter_value_here>]"
KB.

17
var exists = $("#yourSelect option")
               .filter(function (i, o) { return o.value === yourValue; })
               .length > 0;

Bu, sizin için otomatik olarak değerden kaçma avantajına sahiptir, bu da metindeki rastgele tırnaklarla başa çıkmayı çok daha kolay hale getirir.


2

Çalışmıyor, bunu yapmanız gerekiyor:

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

1

Bana yardım et:

  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");
                         }
  });

0

Benzer bir sorunum vardı. Seçim kontrolü için döngü olsa da dom her zaman arama çalıştırmak yerine bir değişken jquery select öğesi kaydetti ve bunu yaptı:

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

0

Diğer cevapların çoğu benim için çalıştı, ancak .find () kullandım:

if ($("#yourSelect").find('option[value="value"]').length === 0){
    ...
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.