2011-05-02 9 views
6

Tengo una selección múltiple que contiene muchas fuentes de donde vino un visitante. También estoy incluyendo una opción (con el valor de "todo") en la parte superior de todas las opciones.jquery seleccione las opciones de entrada, excepto una

Cuando alguien hace clic en esa opción, se seleccionarán todas las opciones. Y esa parte es fácil. He incluido la selección múltiple y jquery que escucha un evento de clic.

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

}); 

Hasta ahora, ¡funciona genial! El jquery también seleccionará la opción superior, naturalmente.

¿Hay alguna manera de decirle a jquery que no seleccione esa opción?

+0

es mejor utilizar 'cha nge' en lugar de 'clic'. Esto también captura captura selecciona con el teclado. –

Respuesta

0

Si he entendido bien lo que estás tratando de hacer, lo haría use una lista de casillas en su lugar y luego seleccione una opción que verifique todas las casillas en lugar de usar un menú desplegable ...

+0

Sí, esa es una opción. Esto es simplemente una preferencia que estoy pidiendo. – coffeemonitor

3

probar este usando el selector de jQuery not()

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

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

}); 
+1

+1 a la buena respuesta – pixelbobby

+0

@pixelhobby, thnx – Neal

0

evitar el problema; simplemente agregue disabled a la opción superior. No desea que puedan enviar esa opción, de todos modos.

<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

¡Es cierto! no hace que jquery deje de reconocer el evento click, desafortunadamente. – coffeemonitor

+0

@user - Ah, buen punto. – eykanal

0

Puede utilizar la no slector así:

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

¿Qué tal

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

tal vez es mejor:

$("#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"); 
} 
}); 
Cuestiones relacionadas