continuacion código para continuar seleccionando y deshabilitando todas las veces que queramos.
Lo primero es habilitar cada opción, y luego mirar los valores seleccionados, y deshabilitar las opciones que coinciden con los valores seleccionados.
Estos 2 pasos son cruciales porque si selecciona de nuevo, los valores desactivados de antes continuarían deshabilitados.
NUEVA VERSIÓN
La forma más elegante, donde utilizamos un mapa() (in stackoverflow there is a good explanation about this method) y las funciones de jQuery filtro() para hacer el trabajo. Menos líneas, y creo que el mismo rendimiento o mejor.
http://www.jsfiddle.net/dactivo/keDDr/
$("select").change(function()
{
$("select option").attr("disabled",""); //enable everything
//collect the values from selected;
var arr = $.map
(
$("select option:selected"), function(n)
{
return n.value;
}
);
//disable elements
$("select option").filter(function()
{
return $.inArray($(this).val(),arr)>-1; //if value is in the array of selected values
}).attr("disabled","disabled");
});
NUEVA VERSIÓN
He editado mi respuesta, esta es mi versión final:
http://www.jsfiddle.net/dactivo/kNbWc/
$("select").change(function()
{
$("select option").attr("disabled",""); //enable everything
DisableOptions(); //disable selected values
});
function DisableOptions()
{
var arr=[];
$("select option:selected").each(function()
{
arr.push($(this).val());
});
$("select option").filter(function()
{
return $.inArray($(this).val(),arr)>-1;
}).attr("disabled","disabled");
}
OLD VERSION
http://www.jsfiddle.net/AyxL3/
$("select").change(function()
{
$("select option").attr("disabled",""); //enable everything
DisableOptions(); //disable selected values
});
function DisableOptions()
{
$("select option").filter(function()
{
var bSuccess=false; //will be our flag to know it coincides with selected value
var selectedEl=$(this);
$("select option:selected").each(function()
{
if($(this).val()==selectedEl.val())
{
bSuccess=true; //it coincides we will return true;
return false; // this serves to break the each loop
}
});
return bSuccess;
}).attr("disabled","disabled");
}
¿Qué respuesta finalmente usó por favor? – netadictos
@netadictos - Tuyo terminó trabajando de la mejor manera, pero todavía no era exactamente lo que estaba buscando. Decidí usar Jquery UI para hacer valores de formulario que se puedan arrastrar. Gracias por su ayuda :) – Batfan
Jquery UI es siempre una forma muy moderna de hacer las cosas, me gusta. Al menos creo que es la solución a la pregunta tal como se describe ;-) – netadictos