Tengo una casilla de verificación que, en determinadas condiciones, debe deshabilitarse. Resulta que HTTP no publica entradas deshabilitadas.
¿Cómo puedo evitar eso? enviar la entrada incluso si está deshabilitada y mantener la entrada deshabilitada?
html
forms
html-input
Un aprendiz
fuente
fuente
Respuestas:
ACTUALIZACIÓN :
READONLY
no funciona en casillas de verificaciónPodría usar,
disabled="disabled"
pero en este punto el valor de la casilla de verificación no aparecerá en losPOST
valores. Una de las estrategias es agregar un campo oculto que contenga el valor de la casilla de verificación dentro del mismo formulario y leer el valor desde ese campoSimplemente cambiedisabled
areadonly
fuente
<input name="foo" value="bar" readonly="readonly" />
readonly
no funcionará, ya que no podrá publicar el valor de una casilla de verificación con dicha etiqueta, usedisabled
junto con el elemento de entrada oculto para mantener el valor de la casilla de verificación, vea cómo: stackoverflow.com/a/8274787/448816He resuelto ese problema.
Como la
readonly="readonly"
etiqueta no funciona (he probado diferentes navegadores), debes usarladisabled="disabled"
en su lugar. Pero el valor de su casilla de verificación no se publicará entonces ...Aquí está mi solución:
Para obtener una apariencia de "solo lectura" y el valor de casilla de verificación POST al mismo tiempo, simplemente agregue una "entrada" oculta con el mismo nombre y valor que su casilla de verificación . Debe mantenerlo junto a su casilla de verificación o entre las mismas
<form></form>
etiquetas:Además, ¡solo para que lo sepan
readonly="readonly", readonly="true", readonly="",
o simplementeREADONLY
NO lo resolverán! ¡He pasado algunas horas para resolverlo!Esta referencia tampoco es relevante (puede que aún no sea, o ya no, no tengo idea): http://www.w3schools.com/tags/att_input_readonly.asp
fuente
Si está satisfecho con JQuery, elimine el atributo deshabilitado cuando envíe el formulario:
fuente
<select>
u<textfield>
otros elementos HTML que admiten eldisabled
atributo, puede seleccionarlos y habilitarlos todos con:$( "*:disabled" ).removeAttr("disabled");
Puede manejarlo de esta manera ... Para cada casilla de verificación, cree un campo oculto con el mismo
name
atributo. Pero establezca el valor de ese campo oculto con algún valor predeterminado con el que pueda probar. Por ejemplo..Si la casilla de verificación está "marcada" cuando se envía el formulario, entonces el valor de ese parámetro del formulario será
Si la casilla de verificación no está marcada, el valor sería
Puede usar cualquier valor en lugar de "falso", pero se entiende la idea.
fuente
Comencé con el problema: "¿cómo enviar / enviar una casilla de verificación de entrada que está deshabilitada?" y en mi respuesta omití el comentario: "Si queremos deshabilitar una casilla de verificación, seguramente debemos mantener un valor prefijado (marcado o desmarcado) y también queremos que el usuario lo sepa (de lo contrario, deberíamos usar un tipo oculto y no es una casilla de verificación) ". En mi respuesta supuse que queríamos mantener siempre marcada una casilla de verificación y ese código funciona de esta manera. Si hacemos clic en esa casilla de verificación, se verificará para siempre y su valor será PUBLICADO / Enviado. De la misma manera, si escribo onclick = "this.checked = false" sin marcado = "marcado" (nota: el valor predeterminado no está marcado) estará sin marcar para siempre y su valor no será PUBLICADO / Enviado.
fuente
crear una clase css, por ejemplo:
aplicar esta clase en lugar del atributo deshabilitado
fuente
La forma más sencilla de hacerlo es:
Esto evitará que el usuario pueda anular la selección de esta casilla de verificación y aún así enviará su valor cuando se envíe el formulario. Eliminar marcado si desea que el usuario no pueda seleccionar esta casilla de verificación.
Además, puede usar javascript para borrar el onclick una vez que se cumpla una determinada condición (si eso es lo que busca). Aquí hay un violín sucio que muestra lo que quiero decir. No es perfecto, pero entiendes la esencia.
http://jsfiddle.net/vwUUc/
fuente
Esto funciona como un encanto:
La única desventaja es el breve parpadeo de los campos de entrada deshabilitados al enviar. ¡Al menos en mi escenario eso no es un gran problema!
fuente
No lo deshabilites; en su lugar, configúrelo como de solo lectura, aunque esto no tiene ningún efecto ya que no permite al usuario cambiar el estado. Pero puede usar jQuery para aplicar esto (evite que el usuario cambie el estado de la casilla de verificación:
Esto supone que todas las casillas de verificación que no desea modificar tienen el atributo "solo lectura". p.ej.
fuente
Ya que:
Te voy a ofrecer otra posibilidad:
Establezca su casilla de verificación como deshabilitada normalmente. Y antes de que el usuario envíe el formulario, active esta casilla de verificación mediante JavaScript.
Debido a que la casilla de verificación está habilitada antes de enviar el formulario, su valor se publica de manera común. Lo único que no es muy agradable de esta solución es que esta casilla de verificación se habilita por un tiempo y eso puede ser visto por los usuarios. Pero es solo un detalle con el que puedo vivir.
fuente
Desafortunadamente no hay una solución 'simple'. El atributo readonly no se puede aplicar a las casillas de verificación. Leí la especificación W3 sobre la casilla de verificación y encontré al culpable:
Si un control no tiene un valor actual cuando se envía el formulario, los agentes de usuario no están obligados a tratarlo como un control exitoso. ( http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 )
Esto hace que el estado no verificado y el estado desactivado den como resultado el mismo valor analizado.
La única forma completa de hacer esto es agregar una entrada oculta con el mismo nombre con javascript al enviar el formulario .
Puedes usar el pequeño fragmento que hice para esto:
Esto busca el primer formulario en el documento, reúne todas las entradas y busca entradas deshabilitadas. Cuando se encuentra una entrada deshabilitada, se crea una entrada oculta en el ParentNode con el mismo nombre y el valor 'on' (si su estado está 'verificado') y '' (si su estado es '' - no marcado).
Esta función debe ser activada por el evento 'onsubmit' en el elemento FORM como:
fuente
Añadir
onsubmit="this['*nameofyourcheckbox*'].disabled=false"
al formulario.fuente
No hay otra opción que no sea un
hidden
campo, así que intente usar unhidden
campo como se muestra en el código a continuación:fuente
La función some_name es un ejemplo de una cláusula anterior para administrar la segunda casilla de verificación que está marcada (publica su valor) o no marcada (no publica su valor) de acuerdo con la cláusula y el usuario no puede modificar su estado; no es necesario gestionar ninguna desactivación de la segunda casilla de verificación
fuente
Puede mantenerlo deshabilitado como desee y luego eliminar el atributo deshabilitado antes de enviar el formulario.
fuente
Agregar
onclick="this.checked=true"
Resuelve mi problema:Ejemplo:
fuente
Aquí hay otra solución que se puede controlar desde el backend.
ASPX
En ASPX.CS
La clase solo se agrega con fines de estilo.
fuente
Acabo de combinar las sugerencias HTML, JS y CSS en las respuestas aquí
HTML:
jQuery:
CSS:
Como el elemento no está 'deshabilitado', todavía pasa por la POST.
fuente