2011-05-02 14 views
6

Mam wybór wielokrotny, który zawiera wiele źródeł, z których pochodził odwiedzający. Mam również opcję (z wartością "wszystkie") na górze wszystkich opcji.jquery wybierz opcje wprowadzania danych, z wyjątkiem jednego:

Gdy ktoś kliknie tę opcję, wszystkie opcje zostaną wybrane. A ta część jest łatwa. Dodałem opcję wielokrotnego wyboru i jquery, która nasłuchuje zdarzenia kliknięcia.

<select name="sourceid[]" id="sourceid" style="width:230px;" multiple="multiple"> 
    <option value="all">-- Select All Sources --</option> 
    <option value="1">Internet</option> 
    <option value="2">Radio</option> 
    <option value="3">Phone</option> 
    <option value="4">Other</option> 
</select> 


$("#sourceid").click(function(){ 

    if($(this).val()=='all'){ $("#sourceid option").attr("selected","selected"); } 

}); 

tej pory działa świetnie! JQuery wybierze oczywiście również opcję górną.

Czy istnieje sposób, aby powiedzieć jquery, aby wykluczyć wybór tej jednej opcji?

+0

Lepiej użyć 'cha nge' zamiast 'click'. To złe przechwytywanie wybiera się za pomocą klawiatury. –

Odpowiedz

0

Jeśli dobrze rozumiem, co próbujesz zrobić, chciałbym zamiast tego użyj listy wyboru, a następnie wybierz wszystko, co sprawdza wszystkie pola zamiast listy rozwijanej ...

+0

Tak, jest to opcja. To jest po prostu preferencja, o którą proszę. – coffeemonitor

3

Spróbuj używając not() selektor jQuery

$("#sourceid").click(function(){ 

    if($(this).val()=='all'){ 
      $("#sourceid option").not(this) 
        .attr("selected","selected"); 
    } 

}); 
+1

+1 za dobrą odpowiedź – pixelbobby

+0

@pixelhobby, thnx – Neal

0

uniknąć problemu; po prostu dodaj disabled do górnej opcji. W każdym razie nie chcesz, aby mogli przesłać tę opcję.

<select name="sourceid[]" id="sourceid" style="width:230px;" multiple="multiple"> 
    <option value="all" disabled>-- Select All Sources --</option> 
    <option value="1">Internet</option> 
    <option value="2">Radio</option> 
    <option value="3">Phone</option> 
    <option value="4">Other</option> 
</select> 
+0

True! to niestety powstrzymuje jQuery od rozpoznania zdarzenia kliknięcia. – coffeemonitor

+0

@user - Ah, dobry punkt. – eykanal

0

można użyć nie slector tak:

$("#sourceid :not(option[value='all'])").attr("selected", "selected"); 
2

Jak o

$("#sourceid option").not(':first').attr("selected","selected"); 
0
$("#sourceid option[value=all]").click(function(){ 
    $(this).siblings().attr("selected","selected"); 
}); 

może jej lepiej:

$("#sourceid option[value=all]").click(function(){ 
if($(this).siblings("[selected=selected]").size() == $(this).siblings().size()) { 
    $(this).siblings().removeAttr("selected"); 
} else { 
    $(this).siblings().attr("selected","selected"); 
} 
}); 
Powiązane problemy