2012-03-14 11 views
7

JQuery'yi kullanarak, sorgu dizgisine bağlı olarak 'select' öğesinde seçili bir seçenek ayarlamaya çalışıyorum.Javascript ve JQuery, seçenek elemanının var olup olmadığını nasıl kontrol edersiniz?

Bu soru this'a benzer, ancak yine de öğeyi seçmeden önce öğenin mevcut olup olmadığını nasıl kontrol edeceğimi bilmem gerekiyor, aksi takdirde sayfa sürekli olarak kendini yenilemeye devam edecektir (aşağıdaki çıkış koşuluna bakın).

Sorgu dizesini almak getParameterByName işlevini kullanarak yapılır ve iyi çalışıyor.

altında şu anki uygulama:

function setSelectedItem(selectName, itemToSelect) { 
    ///<summary>Selects an HTML option element inside a HTML select element based on the value from the query string.</summary> 
    ///<param name="selectName" type="string">The partial name of the HTML select in which 'itemToSelect' must be selected</param> 
    ///<param name="itemToSelect" type="string">The name of the query string parameter which value is the of the 'option' element to select.</param> 

    //If an items has already been selected, return 
    if ($('select[name*=' + selectName + ']')[0].selectedIndex != 0) return; 


    //Fetches the value from the query string; if empty, returns 
    var valueToSelect = getParameterByName(itemToSelect); 
    if (valueToSelect == "") return; 

    //Fecthes the HTML select object 
    var selectObject = $('select[name*=' + selectName + ']'); 

    //HERE how to check if 'valueToSelect' does not exist and return? 

    selectObject.val(valueToSelect).attr('selected', 'selected').change(); 
} 

Güncelleme: çalışmış çözüm oldu:

//Checks if the option exists, and returns otherwise 
    if (!selectObject.find('option[value=' + valueToSelect + ']').length) 
     return; 
+0

değerinin ayarlanması can sıkıcı bir Ama tekrar tekrar bu kodu çalıştırıyorsanız o en olsun tür yüzden işlevsellik bu tür sağlayan küçük bir eklenti yazdım .val() ile o maddeyi seçecek, o zaman neden aynı zamanda '.attr ('selected', 'selected')' kullanıyorsunuz? – nnnnnn

+1

Çalışıyorsa, örneği güncelleyeceğim, teşekkürler – haschdl

cevap

17

deneyin selectObject.find('option[value="'+valueToSelect +'"]').length > 0

+0

Birçok yolu vardır Bunu yapmak için ama bence en basit yol bu. Teşekkürler! – berdem

+3

'valueToSelect' değerini tırnak içine almak daha güvenli görünüyor: 'selectObject.find ('option [value ="' + valueToSelect + '"]'). Length()' –

+0

İyi, ancak bir seçimim varsa Bunun gibi: {"Köpek", "Kedi", "Balık"} ve "kedi" yi (alt durumu not al) aradım, eşleşmedi. – candlejack

2

seçicinin uzunluğunu kontrol edin:

var selectObject = $('select[name*=' + selectName + ']'); 
if (selectObject.length == 0) 
    return; 
selectObject.val(valueToSelect).attr('selected', 'selected').change(); 

Ya örtük boole kullanmak javascript'te dönüşüm:

var selectObject = $('select[name*=' + selectName + ']'); 
if (!selectObject.length) 
    return; 

selectObject.val(valueToSelect).attr('selected', 'selected').change(); 
+0

Bakın, select nesnesinin var olup olmadığını kontrol etmek istemiyorum, bunun yerine valueToSelect'in var olup olmadığını kontrol etmem gerekiyor. @Dennis – haschdl

+0

cevabını kontrol ediyorum Tersine, aynı olmalıdır: D Ben sadece selectObject.find kodunu kullanın ('option [value =' + valueToSelect + ']'). Length() – haschdl

0

Sen eleman var olup olmadığını kontrol etmek için .length>0 kullanabilirsiniz kontrol etmek.

/* doesExist PLUGIN (c) MS */ 
/* (c) Michael Stadler(MS), */ 
(function($){ 
$.fn.doesExist = function() 
{ 
return jQuery(this).length > 0; 
}; 
})(jQuery); 

Kullanımı:

$('#myDiv').doesExist() // returns a boolean 
İlgili konular