Supuse que si deshabilitaba un div, todo el contenido también se deshabilitaba.
Sin embargo, el contenido está en gris pero aún puedo interactuar con él.
¿Hay una manera de hacer eso? (deshabilite un div y obtenga todo el contenido deshabilitado también)
javascript
jquery
html
juan
fuente
fuente
Use un marco como JQuery para hacer cosas como:
Deshabilitar y habilitar elementos de entrada en un bloque div usando jQuery debería ayudarte!
A partir de jQuery 1.6, debe usarlo en
.prop
lugar de.attr
desactivarlo.fuente
Solo quería mencionar este método de extensión para habilitar y deshabilitar elementos . Creo que es una forma mucho más limpia que agregar y eliminar atributos directamente.
Entonces simplemente haces:
fuente
Aquí hay un comentario rápido para las personas que no necesitan un div sino solo un elemento de bloque. En HTML5
<fieldset disabled="disabled"></fieldset>
obtuve el atributo deshabilitado. Cada elemento de formulario en un conjunto de campos deshabilitado está deshabilitado.fuente
El atributo deshabilitado no es parte de la especificación W3C para elementos DIV , solo para elementos de formulario .
El enfoque jQuery sugerido por Martin es la única forma infalible de lograrlo.
fuente
similar a la solución de cletu, pero recibí un error al usar esa solución, esta es la solución:
funciona bien en mi
fuente
Puede usar esta simple declaración CSS para deshabilitar eventos
fuente
Navegadores probados: IE 9, Chrome, Firefox y jquery-1.7.1.min.js
fuente
Una forma de lograr esto es agregando el accesorio deshabilitado a todos los hijos del div. Puede lograr esto muy fácilmente:
$("#myDiv")
encuentra el div,.find("*")
obtiene todos los nodos secundarios en todos los niveles y.prop('disabled', true)
desactiva cada uno.De esta manera, todo el contenido está deshabilitado y no puede hacer clic en ellos, tabularlos, desplazarlos, etc. Además, no necesita agregar ninguna clase de CSS.
fuente
Los controles de entrada HTML se pueden deshabilitar usando el atributo 'deshabilitado' como ya sabe. Una vez que se establece el atributo 'deshabilitado' para un control de entrada, no se invocan los controladores de eventos asociados con dicho control.
Debe simular el comportamiento anterior para los elementos HTML que no admiten el atributo 'deshabilitado' como div, si lo desea.
Si tiene un div y desea admitir un clic o un evento clave en ese div, debe hacer dos cosas: 1) Cuando desee deshabilitar el div, establezca su atributo deshabilitado como de costumbre (solo para cumplir con el convención) 2) En los controladores de clic y / o clave de su div, verifique si el atributo deshabilitado está configurado en el div. Si es así, simplemente ignore el clic o el evento clave (por ejemplo, simplemente regrese de inmediato). Si el atributo deshabilitado no está configurado, haga clic en su div y / o lógica de evento clave.
Los pasos anteriores son independientes del navegador también.
fuente
Envuelva el
div
dentro de unafieldset
etiqueta:fuente
Pensé que añadiría un par de notas.
fuente
Esto es para los buscadores,
Lo mejor que hice es
fuente
Como se mencionó en los comentarios, aún puede acceder al elemento navegando entre los elementos utilizando la tecla de tabulación. así que recomiendo esto:
fuente
Si desea mantener la semántica de discapacitados de la siguiente manera
puedes agregar el siguiente CSS
el beneficio aquí es que no estás trabajando con clases en el div con el que quieres trabajar
fuente
Usaría una versión mejorada de la función de Cletus:
Que almacena la propiedad original 'deshabilitada' del elemento.
fuente
Cómo deshabilitar el contenido de un DIV
La
pointer-events
propiedad CSS por sí sola no deshabilita el desplazamiento de los elementos secundarios, y no es compatible con IE10 y bajo para los elementos DIV (solo para SVG). http://caniuse.com/#feat=pointer-eventsPara deshabilitar el contenido de un DIV en todos los navegadores.
Javascript:
Css:
Para deshabilitar el contenido de un DIV en todos los navegadores, excepto IE10 y menos.
Javascript:
Css:
fuente
A continuación se muestra una solución más completa para enmascarar divs que permite
También se incluye hourglassOn y hourglassOff que se pueden usar por separado
Con esto puedes hacer por ejemplo:
ver jsfiddle
fuente
fuente
O simplemente use css y una clase "deshabilitada".
Nota: no use el atributo deshabilitado.
No es necesario meterse con jQuery activado / desactivado.
Esto es mucho más fácil y funciona en varios navegadores:
Luego puede apagarlo y encenderlo al inicializar su página, o al alternar un botón
fuente
Otra forma, en jQuery, sería obtener la altura interna, el ancho interno y el posicionamiento del DIV que contiene, y simplemente superponer otro DIV, transparente, sobre la parte superior del mismo tamaño. Esto funcionará en todos los elementos dentro de ese contenedor, en lugar de solo las entradas.
Sin embargo, recuerde que con JS deshabilitado, aún podrá usar las entradas / contenido de DIV. Lo mismo ocurre con las respuestas anteriores también.
fuente
fuente
Esta solución css only / noscript agrega una superposición sobre un conjunto de campos (o un div o cualquier otro elemento), evitando la interacción:
Si desea una superposición invisible, es decir, transparente, establezca el fondo en, por ejemplo, rgba (128,128,128,0), ya que no funcionará sin un fondo. Lo anterior funciona para IE9 +. El siguiente CSS mucho más simple funcionará en IE11 +
Cromo
fuente
Si simplemente está tratando de evitar que la gente haga clic y no esté terriblemente preocupado por la seguridad, he encontrado que un div colocado con un índice z de 99999 lo ordena muy bien. No puede hacer clic ni acceder a ninguno de los contenidos porque el div está colocado encima. Puede ser un poco más simple y es una solución solo CSS hasta que necesite eliminarlo.
fuente
Hay bibliotecas de JavaScript configurables que toman una cadena html o un elemento dom y eliminan las etiquetas y atributos no deseados. Estos se conocen como desinfectantes html . Por ejemplo:
Por ejemplo, en DOMPurify
fuente
EDITAR: a continuación he usado el
.on()
método, en su lugar, use el.bind()
métodopara eliminar su configuración, puede usar el
.unbind()
método. Mientras que el.off()
método no funciona como se esperaba.¡Después de investigar cientos de soluciones! aprendiendo sobre eventos de puntero, a continuación es lo que hice.
Como @Kokodoko mencionó en su solución, que es apta para todos los navegadores, excepto IE.
pointer-events
funciona en IE11 y no en las versiones inferiores. También noté en IE11 , los eventos de puntero no funcionan en los elementos secundarios. Y por lo tanto si tenemos algo como abajodonde span -es el elemento hijo , la configuración
pointer-events: none
no funcionaráPara superar este problema, escribí una función que podría actuar como eventos de puntero para IE y funcionará en las versiones inferiores.
En el archivo JS
En archivo CSS
En HTML
Esto falsificó el
pointer-events
escenario dondepointer-events
no funciona y cuando se produce la condición anterior de elementos secundarios.JS Fiddle por lo mismo
fuente
mira mi selector
el
fieldsetUserInfo
se div contiene todas las entradas que quiero discapacitados o HabilitarEspero que esto te ayude
fuente