JQuery kullanarak, bir değerin açılır listeye ait olup olmadığını nasıl kontrol edebilirim?
JQuery kullanarak, bir değerin açılır listeye ait olup olmadığını nasıl kontrol edebilirim?
Yanıtlar:
Attribute Equals Seçicisini Kullanın
var thevalue = 'foo';
var exists = 0 != $('#select-box option[value='+thevalue+']').length;
Seçeneğin değeri Javascript aracılığıyla ayarlanmışsa, bu işe yaramaz. Bu durumda aşağıdakileri yapabiliriz:
var exists = false;
$('#select-box option').each(function(){
if (this.value == 'bar') {
exists = true;
return false;
}
});
return false
?
Siz (veya başka biri) jQuery olmadan yapmakla ilgilenmeniz durumunda:
var exists = false;
for(var i = 0, opts = document.getElementById('select-box').options; i < opts.length; ++i)
if( opts[i].value === 'bar' )
{
exists = true;
break;
}
İşte benzer bir seçenek daha. Benim durumumda, bir seçim listesi oluştururken başka bir kutudaki değerleri kontrol ediyorum. Karşılaştırdığımda tanımsız değerlerle karşılaşmaya devam ettim, bu yüzden çekimi şu şekilde ayarladım:
if ( $("#select-box option[value='" + thevalue + "']").val() === undefined) { //do stuff }
Bu yaklaşımın daha pahalı olup olmadığını bilmiyorum.
Neden bir filtre kullanmıyorsunuz?
var thevalue = 'foo';
var exists = $('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length;
Gevşek karşılaştırmalar işe yarar çünkü var> 0 doğrudur, var == 0 yanlıştır, bu nedenle sadece kullanabilirsiniz
if(exists){
// it is in the dropdown
}
Veya birleştirin:
if($('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length){
// found
}
Veya her seçim açılır listesinin seçim kutuları sınıfına sahip olduğu durumlarda, bu size değeri içeren seçim (ler) in jquery nesnesini verir:
var matched = $('.select-boxes option').filter(function(){ return $(this).val() == thevalue; }).parent();
if(!$('#select-box').find("option:contains('" + thevalue + "')").length){
//do stuff
}
theValue
ama option_number
açılır listede. Çözümün yanlış.
Bunun biraz eski bir soru olduğunu biliyorum, bu soru daha iyi çalışıyor.
if(!$('.dropdownName[data-dropdown="' + data["item"][i]["name"] + '"] option[value="'+data['item'][i]['id']+'"]')[0]){
//Doesn't exist, so it isn't a repeat value being added. Go ahead and append.
$('.dropdownName[data-dropdown="' + data["item"][i]["name"] + '"]').append(option);
}
Bu örnekte görebileceğiniz gibi, benzersiz etiketler veri açılır adı ve seçilen seçeneğin değerine göre arama yapıyorum. Elbette bunların çalışması için bunlara ihtiyacınız yok ama ben onları dahil ettim ki diğerleri sizi görebilsin, çoklu değerler vb.
]
ve `\` dahil herhangi bir karakteri içeren seçenek değerlerine izin verdiği için daha güvenlidir . Doğru CSS kaçışını yapmadan ham metinden seçici dizeler oluşturmaktan kaçının.