2011-05-02 14 views
6

ho una selezione multipla che contiene molte fonti per dove un visitatore è venuto. Sto anche includendo un'opzione (con il valore di "tutti") nella parte superiore di tutte le opzioni.jQuery selezionare opzioni di input, ad eccezione di una

Quando qualcuno fa clic su questa opzione, tutte le opzioni saranno selezionate. E quella parte è facile. Ho incluso il multi-select e jquery che ascolta un evento click.

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

}); 

Finora funziona benissimo! Il jquery selezionerà anche l'opzione in alto, naturalmente.

C'è un modo per dire a jQuery di escludere la selezione di quella opzione?

+0

È meglio usare 'cha nge' invece di 'click'. Questo malato acquisisce anche selezioni con la tastiera. –

risposta

0

Se ho capito bene quello che stai cercando di fare, vorrei utilizzare un elenco casella di controllo invece e poi hanno un Seleziona tutto che controlla tutte le caselle invece di utilizzare un menu a discesa ...

+0

Sì, questa è un'opzione. Questa è semplicemente una preferenza che sto chiedendo. – coffeemonitor

3

Prova questa con il selettore di jQuery not()

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

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

}); 
+1

+1 per buona risposta – pixelbobby

+0

@pixelhobby, thnx – Neal

0

evitare il problema; basta aggiungere disabled all'opzione superiore. Non vuoi che siano in grado di presentare questa opzione, comunque.

<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

vero! purtroppo impedisce a jquery di riconoscere l'evento click. – coffeemonitor

+0

@user - Ah, buon punto. – eykanal

0

È possibile utilizzare la non slector in questo modo:

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

Come su

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

forse è meglio:

$("#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"); 
} 
}); 
Problemi correlati