Hacer un select readonly con jQuery

Para un select no es aplicable la opción readonly, o está deshabilitado o está activo, pero no puede estar activo y ser readonly. Esto es lo que HTML y los navegadores te dicen pero hay una opción a esto y es deshabilitar todos los option no seleccionados con jQuery, de esta manera con este sencillo código JavaScript podemos simular tener un select readonly.

$('#selectid option:not(:selected)').attr('disabled',true);

Para los que quieran un poco más de teoría pueden seguir leyendo el post.

Diferencias entre controles readonly y disabled

La principal diferencia entre readonly y disabled es que aunque en ambos casos el contenido del control sobre el que se aplica no puede ser modificado en caso de readonly este valor si se envía al hacer el submit del formulario mientras en el caso de un control disabled este valor nunca se envía, con lo cual suele ser interesante tener un control no modificable pero que queramos tener su valor al recibir los datos del formulario.

Otra diferencia es que el atributo disabled se puede aplicar a cualquier control en un formulario mientras el readonly es solo para los input y los textarea, por eso es este truco para hacer los select readonly.

También hay diferencias en cuanto a la tabulación y el foco, por ejemplo no se puede dirigir el foco hacia controles deshabilitados y en el orden de tabulación se salta por encima de estos controles, mientras que el foco puede dirigirse hacia elementos de sólo lectura (aunque éstos no puedan ser modificados por el usuario) y estos elementos de sólo lectura si están incluidos en la navegación con tabulador.

Comentarios

Anónimo ha dicho que…
Excelente aporte
Anónimo ha dicho que…
gran aclaracion
JDik ha dicho que…
gracias por tu aporte, me sirvió de mucho
Anónimo ha dicho que…
Excelente, saludos
Sir Boor ha dicho que…
Muchas gracias por este truco!
Ameth ha dicho que…
Pero para realizar lo contrario? Es decir, cuando se deshabilita y quiero volver a habilitarlo, poner en el atributo disabled: false, no funciona...
Reynier ha dicho que…
Este post es bastante antiguo ahora en vez de utilizar attr deberías utilizar la función prop, prueba con eso
Anónimo ha dicho que…
gran aporte. gracias
Diego Rmz De gante ha dicho que…
Excelente muchas gracias, justo lo que necesitaba.
Katha Lezama ha dicho que…
Despues de tanto tiempo aun sirve gracias bro!
Anónimo ha dicho que…
Buenisimo.!!!
me sirvió en el momento exacto.

Gracias.,
Vanessa ha dicho que…
DIOSSS!!! MUCHAS GRACIAS de verdad necesitaba esto, estoy en mi trabajo y hace 2 días intentaba con el readonly y nada que funcionaba
Luego encontré tu explicación como caída del cielo, lo intente y funciono!!
De verdad muchas gracias <3 <3 <3
Reynier ha dicho que…
Gracias a ti Vanessa por comentar