2010-12-08 11 views
11

Używam multiseleksu z opcjami zgrupowanymi razem.Jak uzyskać Optgroup dla multiselect w jQuery?

<select title="Fruits" multiple="multiple" id="fruits" name="fruits[]"> 
    <option selected="selected" label="All" value="">All</option> 
    <optgroup label="" class="fruit"> 
     <option label="apple" value="1">Apple</option> 
     <option label="pear" value="2">Pear</option> 
     <option label="orange" value="3">Orange</option> 
    </optgroup> 
    <optgroup label="" class="berries"> 
     <option label="strawberry" value="4">Strawberry</option> 
     <option label="raspberry" value="5">Raspberry</option> 
     <option label="blueberry" value="6">Blueberry</option> 
    </optgroup> 
</select> 

Próbowałem $(this).find("option:selected").parent().attr("label") który zwraca tylko optgroup pierwszej wybranej opcji, czyli jeśli były zarówno wybrany truskawka i gruszka, optgroup „.fruit” zostaną zwrócone na obu kontach.

Korzystając z jQuery, w jaki sposób uzyskać grupę optyczną dla każdej wybranej opcji?

Odpowiedz

16

Spróbuj

$(this).find("option:selected").each(function(){ 
    $(this).parent().attr("label"); 
}); 
3

Spróbuj z .each()

$(this).find("option:selected").each(function(){ 
    alert($(this).parent().attr("label")); 
}); 
4

To może być trochę za późno, ale właśnie skończyłem pracę nad tym problemem i to wydaje się być najbardziej eleganckie rozwiązanie znalazłem :

$("#fruits option").filter(":selected").parent("optgroup").attr("label"); 

Oto skrzypce zmodyfikowane dla tego konkretnego przykładu (Korzystanie z atrybut class zamiast atrybutu label): http://jsfiddle.net/pNjsj/

nadzieję, że pomoże ktoś :)

+0

Jeśli połowu zdarzenie i robi $ (e.target) .filter („: wybrano”) z jakiegoś powodu nie zadziała. W takim przypadku działa $ (e.target) .find (": selected"). W rzeczywistości find() działa w obu przypadkach, więc polecam użyć tego zamiast filtra(). – Swader

Powiązane problemy