2012-08-15 95 views
8

¿Existe un atributo o técnica para los campos de selección de HTML que sea equivalente a readOnly="true" para entradas HTML?A readOnly Equivalent para HTML Select Elements

Tengo un campo de selección de formulario que me gustaría deshabilitar, pero aún lo transfiero cuando se publica el formulario. Si esto fuera una entrada HTML, que haría algo como esto

$('select_id').setAttribute('readOnly', 'true'); 

y el navegador haría que el campo no editable, pero su valor aún sería pasado al backend. Me gustaría algo similar para una selección HTML, pero haciendo lo siguiente

$('#select_id').setAttribute('readOnly', 'true'); 

no funciona. El atributo se ha agregado correctamente al DOM, pero el navegador aún lo muestra como seleccionable.

que se dan cuenta de que podía hacer lo siguiente

$('#input_id').disabled(); 

pero cuando un campo está desactivado su valor no se pasa a través de backend.

Me gustaría una forma de deshabilitar este campo de selección pero aún así pasar al back-end.

(ejemplos utilizan Prototipo JS, pero estoy interesado en ninguna solución general)

Respuesta

22

Desactivar todos, pero la opción seleccionada:

<select> 
<option disabled="disabled">1</option> 
<option selected="selected">2</option> 
<option disabled="disabled">3</option> 
</select> 

De esta manera el menú desplegable todavía funciona (y envía su valor) pero el usuario no puede seleccionar otro valor.

+2

No estoy seguro que abajo votado o por qué, esto parece funcionar (al menos en Chrome, probando otros navegadores en este momento) –

+3

@AlanStorm, eso es una prueba increíble :)) –

+2

El problema con esta solución es que ese usuario aún puede anular la selección de opciones usando CTRL + clic en –

3

agregar la clase discapacitados:

.disabled{ 
    color: grey; 
} 

si la clase uso actual prevenir defecto en el enfoque y en el clic y, dbl clic:

$('#el').bind('click dblclick focus').function(event){ 
    if ($(this).hasClass('disabled')) event.preventDefault(); 
}); 
+4

. , este ejemplo parece ser usin g jQuery. –