Eu estava no pressuposto de que, se eu desabilitasse uma div, todo o conteúdo também seria desabilitado.
No entanto, o conteúdo está acinzentado, mas ainda posso interagir com ele.
Existe uma maneira de fazer isso? (desabilite uma div e desative também todo o conteúdo)
javascript
jquery
html
juan
fonte
fonte
Use uma estrutura como o JQuery para fazer coisas como:
Desativar e ativar elementos de entrada em um bloco div O uso do jQuery deve ajudá-lo!
A partir do jQuery 1.6, você deve usar em
.prop
vez de.attr
desativar.fonte
Eu só queria mencionar esse método de extensão para ativar e desativar elementos . Eu acho que é uma maneira muito mais limpa do que adicionar e remover atributos diretamente.
Então você simplesmente faz:
fonte
Aqui está um comentário rápido para pessoas que não precisam de uma div, mas apenas de um bloqueio. No HTML5,
<fieldset disabled="disabled"></fieldset>
obtive o atributo desativado. Todo elemento de formulário em um conjunto de campos desabilitado está desabilitado.fonte
O atributo desativado não faz parte da especificação W3C para elementos DIV , apenas para elementos de formulário .
A abordagem do jQuery sugerida por Martin é a única maneira infalível de fazer isso.
fonte
semelhante à solução do cletu, mas recebi um erro ao usar essa solução, esta é a solução alternativa:
funciona bem em mim
fonte
Você pode usar esta instrução CSS simples para desativar eventos
fonte
Navegadores testados: IE 9, Chrome, Firefox e jquery-1.7.1.min.js
fonte
Os controles de entrada HTML podem ser desativados usando o atributo 'disabled' como você sabe. Depois que o atributo 'desativado' para um controle de entrada é definido, os manipuladores de eventos associados a esse controle não são chamados.
Você deve simular o comportamento acima para elementos HTML que não suportam o atributo 'disabled' como div, se desejar.
Se você tem uma div e deseja dar suporte ao clique ou a um evento-chave nessa div, é necessário fazer duas coisas: 1) Quando quiser desativar a div, defina seu atributo desativado como de costume (apenas para cumprir com o convenção) 2) Nos manipuladores de cliques e / ou chaves de sua div, verifique se o atributo desativado está definido na div. Se for, desconsidere o evento de clique ou chave (por exemplo, retorne imediatamente). Se o atributo desativado não estiver definido, faça o clique do div e / ou a lógica do evento principal.
As etapas acima também são independentes do navegador.
fonte
Uma maneira de conseguir isso é adicionando o suporte desativado a todos os filhos da div. Você pode conseguir isso com muita facilidade:
$("#myDiv")
encontra a div,.find("*")
obtém todos os nós filhos em todos os níveis e.prop('disabled', true)
desativa cada um.Dessa forma, todo o conteúdo está desabilitado e você não pode clicar neles, separá-los, rolar-los, etc. Além disso, você não precisa adicionar nenhuma classe css.
fonte
Coloque a tag
div
dentro de umafieldset
tag:fonte
Pensei em fazer algumas anotações.
fonte
Isto é para os pesquisadores,
O melhor que fiz é,
fonte
Conforme mencionado nos comentários, você ainda pode acessar o elemento navegando entre os elementos usando a tecla tab. então eu recomendo isso:
fonte
Se você deseja manter a semântica de desativado da seguinte maneira
você pode adicionar o seguinte CSS
o benefício aqui é que você não está trabalhando com classes na div com a qual deseja trabalhar
fonte
Eu usaria uma versão aprimorada da função Cletus:
Que armazena a propriedade 'desativada' original do elemento.
fonte
Como desativar o conteúdo de um DIV
A
pointer-events
propriedade CSS sozinha não desabilita a rolagem de elementos filho e não é suportada pelo IE10 e inferior para elementos DIV (apenas para SVG). http://caniuse.com/#feat=pointer-eventsPara desativar o conteúdo de um DIV em todos os navegadores.
Javascript:
Css:
Para desativar o conteúdo de um DIV em todos os navegadores, exceto IE10 e inferiores.
Javascript:
Css:
fonte
Abaixo está uma solução mais abrangente para mascarar divs, permitindo
Também está incluída a ampulheta On e a ampulheta Off, que podem ser usadas separadamente
Com isso, você pode fazer, por exemplo:
veja jsfiddle
fonte
fonte
Ou apenas use css e uma classe "disabled".
Nota: não use o atributo desativado.
Não é necessário mexer no jQuery.
Isso é muito mais fácil e funciona em vários navegadores:
Em seguida, você pode desligá-lo ao inicializar sua página ou alternar um botão
fonte
Outra maneira, no jQuery, seria obter a altura interna, a largura interna e o posicionamento da DIV contida e simplesmente sobrepor outra DIV, transparente, por cima do topo do mesmo tamanho. Isso funcionará em todos os elementos dentro desse contêiner, em vez de apenas nas entradas.
Lembre-se, porém, com o JS desativado, você ainda poderá usar as entradas / conteúdo dos DIVs. O mesmo acontece com as respostas acima também.
fonte
fonte
Esta solução somente CSS / noscript adiciona uma sobreposição acima de um conjunto de campos (ou uma div ou qualquer outro elemento), impedindo a interação:
Se você deseja uma sobreposição invisível, ou seja, transparente, defina o plano de fundo como, por exemplo, rgba (128,128,128,0), pois não funcionará sem um plano de fundo. O acima funciona para o IE9 +. O seguinte css muito mais simples funcionará no IE11 +
cromada
fonte
Se você está simplesmente tentando impedir que as pessoas cliquem e não está terrivelmente preocupado com a segurança - eu encontrei uma div absoluta com um índice z de 99999 classifica tudo bem. Você não pode clicar ou acessar qualquer conteúdo porque a div é colocada sobre ele. Pode ser um pouco mais simples e é uma solução apenas de CSS até que você precise removê-lo.
fonte
Existem bibliotecas javascript configuráveis que recebem uma string html ou um elemento dom e eliminam tags e atributos indesejados. Estes são conhecidos como higienizadores html . Por exemplo:
Por exemplo, no DOMPurify
fonte
EDIT: Abaixo eu usei o
.on()
método, em vez usar o.bind()
métodopara remover sua configuração, você pode usar o
.unbind()
método Considerando que o.off()
método não funciona como esperado.Depois de pesquisar centenas de soluções! aprendendo sobre eventos-ponteiro, abaixo está o que eu fiz.
Como @Kokodoko mencionou em sua solução, que é adequado para todos os navegadores, exceto o IE.
pointer-events
funciona no IE11 e não nas versões inferiores. Também notei no IE11 , eventos de ponteiro não funcionam nos elementos filho. E, portanto, se tivermos algo como abaixoonde span -é o elemento filho , a configuração
pointer-events: none
não funcionaráPara superar esse problema, escrevi uma função que poderia atuar como eventos-ponteiro para o IE e funcionará nas versões inferiores.
No arquivo JS
No arquivo CSS
Em HTML
Isso falsificou o
pointer-events
cenário em quepointer-events
não funciona e quando a condição acima dos elementos filho ocorre.JS Fiddle pela mesma
fonte
olhe para o meu seletor
o
fieldsetUserInfo
is div contém todas as entradas que eu quero desabilitar ou habilitarEspero que isso ajude você
fonte