Pensé que podrían estar, pero como no estoy poniendo mi dinero donde estaba mi boca (por así decirlo), establecer el atributo de solo lectura en realidad no parece hacer nada.
Prefiero no usar Disabled, ya que quiero que las casillas marcadas se envíen con el resto del formulario, simplemente no quiero que el cliente pueda cambiarlas bajo ciertas circunstancias.
readonly
)readonly
! ¿Por qué entonces este atributo existiría?readonly
es solo un atributo del lado del cliente para ayudar a un navegador a representar correctamente un sitio y luego construir la solicitud correcta a partir de él. El servidor no puede ni debe saber sobre elreadonly
atributo de la página representada. Debe asumir que la solicitud vino de cualquier parte (y posiblemente con intenciones maliciosas); nunca confíe en la entrada proporcionada por el usuario. Aún así, ¿por qué enviar el valor de una casilla de verificación que no se puede editar en una solicitud (si se establece el valor antes de la representación, que ya conoce el valor cuando la solicitud se presentó, por lo que no hay necesidad de transmitirlo en la solicitud)readonly
atributo existe allí por alguna razón. Ciertamente no tiene nada que ver con la implementación del lado del servidor. Pero está ahí para decirle al usuario "¡Oye! Se asume este valor aquí, y / pero no puedes cambiar esto".Respuestas:
puedes usar esto:
Esto funciona porque devolver falso desde el evento de clic detiene la continuación de la cadena de ejecución.
fuente
checked="checked"
, no meterse con el javascript. El javascript está ahí para forzar que los clics del mouse sean ignorados en el objeto de entrada, no para establecer el estado de la casilla de verificación.READONLY
no funciona en casillas de verificación, ya que le impide editar el valor de un campo , pero con una casilla de verificación está editando el estado del campo (activado || desactivado)Desde faqs.org :
Si no desea usar
disabled
pero aún desea enviar el valor, ¿qué le parece enviar el valor como un campo oculto e imprimir su contenido al usuario cuando no cumple con los criterios de edición? p.ejfuente
Esta es una casilla de verificación que no puede cambiar:
Simplemente agregue
disabled="disabled"
como un atributo.Editar para abordar los comentarios:
Si desea que los datos se vuelvan a publicar, entonces una solución simple es aplicar el mismo nombre a una entrada oculta:
De esta manera, cuando la casilla de verificación está configurada como 'deshabilitada', solo sirve para una representación visual de los datos, en lugar de estar realmente 'vinculada' a los datos. En la publicación posterior, el valor de la entrada oculta se envía cuando la casilla de verificación está desactivada.
fuente
Pero absolutamente DEBE validar los datos en el servidor para asegurarse de que no se hayan cambiado.
fuente
otra "solución simple":
fuente
name
yvalue
atributos de su caja ficticia, también="checked"
y="diabled"
los valores de atributo podrían dejarse. w3.org/TR/html-markup/input.checkbox.htmlEsto presenta un problema de usabilidad.
Si desea mostrar una casilla de verificación, pero no dejar que interactúe con ella, ¿por qué incluso una casilla de verificación?
Sin embargo, mi enfoque sería usar deshabilitado (el usuario espera que una casilla deshabilitada no sea editable, en lugar de usar JS para hacer que una habilitada no funcione), y agregar un controlador de envío de formulario usando javascript que habilite las casillas de verificación justo antes de que el formulario esté presentado. De esta manera, usted obtiene sus valores publicados.
es decir, algo como esto:
fuente
con jquery:
aún podría ser una buena idea dar alguna pista visual (css, texto, ...), de que el control no aceptará entradas.
fuente
$(':checkbox[readonly]')
para seleccionar todas las casillas de verificación candidatas ya que elreadonly
valor del atributo es opcional.Usé esto para lograr los resultados:
fuente
Me di cuenta de la solución dada a continuación. En encontré mi investigación para el mismo problema. No sé quién lo había publicado, pero no fue hecho por mí. Utiliza jQuery:
Esto haría que las casillas de verificación fueran de solo lectura, lo que sería útil para mostrar datos de solo lectura al cliente.
fuente
fuente
onclick="javascript: return true;"
solo hace que actúe como una casilla de verificación normal. Consejos? ¡Gracias!checked
atributo y mantenlofalse
en su lugar.Respuesta tardía, pero la mayoría de las respuestas parecen complicarla demasiado.
Según tengo entendido, el OP básicamente quería:
Se debe notar que:
disabled
atributo, porque "quieren que las casillas marcadas se envíen con el resto del formulario".yes
ofalse
, sino que puede ser cualquier texto.Por lo tanto, dado que el
readonly
atributo no funciona, la mejor solución, que no requiere JavaScript, es:Entonces, para una casilla marcada:
Para una casilla de verificación sin marcar:
El principal problema con las entradas deshabilitadas, especialmente las casillas de verificación, es su bajo contraste, que puede ser un problema para algunas personas con ciertas discapacidades visuales. Puede ser mejor indicar un valor con palabras simples, como
Status: none
oStatus: implemented
, pero incluyendo la entrada oculta anterior cuando se usa esta última, como:fuente
La mayoría de las respuestas actuales tienen uno o más de estos problemas:
Lo siguiente es simple y no tiene ninguno de esos problemas.
Si la casilla de verificación es de solo lectura, no cambiará. Si no es así, lo hará. Utiliza jquery, pero probablemente ya lo estés usando ...
Funciona.
fuente
fuente
Si desea que se envíen al servidor con el formulario pero no interaccionen al usuario, puede usarlo
pointer-events: none
en css ( funciona en todos los navegadores modernos excepto IE10- y Opera 12- ) y configurar el índice de tabulación-1
para evitar cambios a través del teclado. También tenga en cuenta que no puede usar lalabel
etiqueta ya que hacer clic en ella cambiará el estado de todos modos.fuente
for
atributo. En ese caso puedes usarinput[type="checkbox"][readonly] + label { pointer-events: none !important; }
.label
y agregadotabindex
? ¿Cómo establece el foco en el elemento desenfocable para presionar un espacio en él?<input type="checkbox" onclick="return false" />
funcionará para ti, estoy usando estofuente
Algunas de las respuestas aquí parecen un poco indirectas, pero aquí hay un pequeño truco.
entonces en jquery puedes elegir una de dos opciones:
demostración: http://jsfiddle.net/5WFYt/
fuente
Sobre la base de las respuestas anteriores, si usa jQuery, esta puede ser una buena solución para todas las entradas:
Estoy usando esto con Asp.Net MVC para configurar algunos elementos de formulario de solo lectura. Lo anterior funciona para texto y casillas de verificación configurando cualquier contenedor principal como .readonly como en los siguientes escenarios:
fuente
fuente
Sé que "deshabilitado" no es una respuesta aceptable, ya que el operador quiere que se publique. Sin embargo, siempre tendrá que validar los valores en el lado del servidor INCLUSO si tiene configurada la opción de solo lectura. Esto se debe a que no puede evitar que un usuario malintencionado publique valores utilizando el atributo de solo lectura.
Sugiero almacenar el valor original (lado del servidor) y configurarlo en deshabilitado. Luego, cuando envían el formulario, ignore los valores publicados y tome los valores originales que almacenó.
Se verá y se comportará como si fuera un valor de solo lectura. Y maneja (ignora) las publicaciones de usuarios malintencionados. Estás matando 2 pájaros de un tiro.
fuente
Hubiera comentado la respuesta de ConroyP, pero eso requiere 50 reputación que no tengo. Tengo suficiente reputación para publicar otra respuesta. Lo siento.
El problema con la respuesta de ConroyP es que la casilla de verificación se vuelve inmutable ni siquiera la incluye en la página. Aunque Electrons_Ahoy no estipula tanto, la mejor respuesta sería una en la que la casilla de verificación inmutable sería similar, si no la misma, que la casilla de verificación cambiable, como es el caso cuando se aplica el atributo "deshabilitado". Una solución que aborde las dos razones que Electrons_Ahoy da para no querer usar el atributo "deshabilitado" no lo haría necesariamente inválido porque utilizó el atributo "deshabilitado".
Suponga dos variables booleanas, $ check y $ disabled:
La casilla de verificación se muestra como marcada si $ check es verdadero. La casilla de verificación se muestra como desmarcada si $ marcado es falso. El usuario puede cambiar el estado de la casilla de verificación si y solo si $ disabled es falso. El parámetro "my_name" no se publica cuando la casilla de verificación no está marcada, por el usuario o no. El parámetro "my_name = 1" se publica cuando la casilla de verificación está marcada, por el usuario o no. Creo que esto es lo que Electrons_Ahoy estaba buscando.
fuente
No, las casillas de entrada no pueden ser de solo lectura.
¡Pero puedes hacerlos de solo lectura con javascript!
Agregue este código en cualquier lugar en cualquier momento para que las casillas de verificación solo funcionen como se supone, evitando que el usuario lo modifique de alguna manera.
Puede agregar este script en cualquier momento después de que jQuery se haya cargado.
Funcionará para elementos agregados dinámicamente.
Funciona seleccionando el evento de clic (que ocurre antes del evento de cambio) en cualquier elemento de la página, luego verifica si este elemento es una casilla de verificación de solo lectura, y si lo es, bloquea el cambio.
Hay tantos ifs para que no afecte el rendimiento de la página.
fuente
Simplemente use una etiqueta deshabilitada simple como esta a continuación.
fuente
una idea alternativa es usar una superposición y cubrir sus entradas de solo lectura
http://pure-essence.net/2011/09/22/jquery-read-only-elements/
fuente
Si desea que TODAS sus casillas de verificación estén "bloqueadas" para que el usuario no pueda cambiar el estado "marcado" si está presente el atributo "solo lectura", puede usar jQuery:
Lo bueno de este código es que le permite cambiar el atributo "solo lectura" en todo el código sin tener que volver a vincular cada casilla de verificación.
Funciona también para botones de radio.
fuente
La razón principal por la que las personas desean una casilla de verificación de solo lectura y (también) un grupo de radio de solo lectura es para que la información que no se puede cambiar se pueda presentar al usuario en el formulario en que se ingresó.
OK deshabilitado hará esto; desafortunadamente, los controles deshabilitados no se pueden navegar con el teclado y, por lo tanto, no cumplen con todas las leyes de accesibilidad. Este es el mayor bloqueo en HTML que conozco.
fuente
Contribuyendo muy muy tarde ... pero de todos modos. Al cargar la página, use jquery para deshabilitar todas las casillas de verificación, excepto la seleccionada actualmente. Luego configure el seleccionado actualmente como solo lectura para que tenga un aspecto similar al de los deshabilitados. El usuario no puede cambiar el valor, y el valor seleccionado aún se envía.
fuente
Muy tarde a la fiesta, pero encontré una respuesta para MVC (5) deshabilité CheckBox y agregué un HiddenFor ANTES de la casilla de verificación, por lo que cuando se publica, encuentra primero el campo Oculto y usa ese valor. Esto funciona
fuente
Usaría el atributo de solo lectura
Luego use CSS para deshabilitar las interacciones:
Tenga en cuenta que usar la pseudoclase: solo lectura no funciona aquí.
fuente
READONLY en sí mismo no funcionará. Es posible que pueda hacer algo funky con CSS, pero generalmente los desactivamos.
ADVERTENCIA: si se publican de nuevo, el cliente puede cambiarlos, punto. No puede confiar en solo lectura para evitar que un usuario cambie algo. El siempre podría usar el violinista o simplemente cambiar el html con firebug o algo así.
fuente
Mi solución es en realidad lo opuesto a la solución de FlySwat, pero no estoy seguro de si funcionará para su situación. Tengo un grupo de casillas de verificación, y cada una tiene un controlador onClick que envía el formulario (se utilizan para cambiar la configuración del filtro de una tabla). No quiero permitir múltiples clics, ya que los clics posteriores después del primero se ignoran. Entonces deshabilito todas las casillas de verificación después del primer clic y después de enviar el formulario:
onclick="document.forms['form1'].submit(); $('#filters input').each(function() {this.disabled = true});"
Las casillas de verificación están en un elemento span con un ID de "filtros": la segunda parte del código es una instrucción jQuery que recorre las casillas de verificación y deshabilita cada una de ellas. De esta forma, los valores de las casillas de verificación aún se envían a través del formulario (ya que el formulario se envió antes de deshabilitarlos), y evita que el usuario los cambie hasta que la página se vuelva a cargar.
fuente