2012-03-14 8 views
7

Korzystając z JQuery, próbuję ustawić opcję wybraną w elemencie "wybierz" na podstawie ciągu zapytania.JavaScript i JQuery, jak sprawdzić, czy element opcji istnieje w select?

To pytanie jest podobne do this, ale nadal muszę wiedzieć, jak sprawdzić, czy element istnieje przed dokonaniem wyboru, w przeciwnym razie strona będzie odświeżać się w sposób ciągły (patrz warunek wyjścia poniżej).

Pobieranie łańcucha zapytania odbywa się za pomocą funkcji getParameterByName i działa poprawnie.

Obecna implementacja poniżej:

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

Aktualizacja: Rozwiązanie który pracował był:

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

ustawienie wartości z '.val()' wybierze ten element, dlaczego więc używasz również '.attr ('selected', 'selected')'? – nnnnnn

+1

Zaktualizuję przykład, jeśli to zadziała, dziękuję – haschdl

Odpowiedz

17

Spróbuj sprawdzić selectObject.find('option[value="'+valueToSelect +'"]').length > 0

+0

Istnieje wiele sposobów aby to zrobić, ale myślę, że ten jest najprostszy. Dzięki! – berdem

+3

Wydaje się bezpieczniejsze zawijanie wartości 'valueToSelect' w cudzysłowach:' selectObject.find ('option [value = "' + valueToSelect + '"]'). Length() ' –

+0

Dobrze, ale jeśli mam wybór w następujący sposób: {"Pies", "Kot", "Ryba"} i szukam "kota" (zauważ, że małe litery) nie pasują. – candlejack

2

Sprawdź długość selektora:

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

Albo używać niejawny logiczną konwersja w javascript:

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

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

Zobacz, nie chcę sprawdzić, czy istnieje zaznaczony obiekt, zamiast tego muszę sprawdzić, czy istnieje valueToSelect. Sprawdzam odpowiedź z @Dennis – haschdl

+0

Odwrotnie, powinno być to samo: D Więc po prostu używam kodu selectObject.find ('option [value =' + valueToSelect + ']'). Length() – haschdl

0

Można użyć .length>0 aby sprawdzić, czy element istnieje. Ale jeśli używasz tego kodu w kółko to się trochę irytujące, więc napisałem mały plugin, który zapewnia tego rodzaju funkcjonalność:

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

Zastosowanie:

$('#myDiv').doesExist() // returns a boolean 
Powiązane problemy