É possível desativar os campos do formulário usando CSS? Claro que conheço o atributo desativado, mas é possível especificar isso em uma regra CSS? Algo como -
<input type="text" name="username" value="admin" >
<style type="text/css">
input[name=username] {
disabled: true; /* Does not work */
}
</style>
A razão pela qual estou perguntando é que, eu tenho um aplicativo em que os campos do formulário são gerados automaticamente e os campos são ocultos / exibidos com base em algumas regras (que são executadas em Javascript). Agora eu quero estendê-lo para oferecer suporte a campos de desativação / ativação, mas a maneira como as regras são escritas para manipular diretamente as propriedades de estilo dos campos de formulário. Então agora eu tenho que estender o mecanismo de regras para alterar os atributos, bem como o estilo dos campos de formulário e, de alguma forma, parece menos do que o ideal.
É muito curioso que você tenha propriedades visíveis e de exibição em CSS, mas não ative / desative. Existe algo parecido no padrão HTML5 ainda em andamento ou mesmo algo fora do padrão (específico do navegador)?
Respostas:
Isso pode ser útil:
Atualizar:
e se quiser desativar o índice da guia, você pode usá-lo desta maneira:
fonte
Você pode fingir o efeito desativado usando CSS.
Você também pode querer mudar as cores etc.
fonte
Como as regras estão sendo executadas em JavaScript, por que não desativá-las usando javascript (ou, no meu caso de exemplo, jQuery)?
ATUALIZAR
A
attr
função não é mais a principal abordagem para isso, como foi apontado nos comentários abaixo. Agora isso é feito com aprop
funçãofonte
.prop()
vez de.attr()
para este caso. "No jQuery 1.6, o método .attr () retorna indefinido para atributos que não foram definidos. Para recuperar e alterar propriedades do DOM, como o estado verificado, selecionado ou desativado dos elementos do formulário, use o método .prop (). " Documentação de origem: .attr () e .prop ()É muito curioso que você ache isso muito curioso. Você está entendendo mal o propósito do CSS. CSS não pretende alterar o comportamento dos elementos do formulário. É para mudar apenas o estilo deles . Ocultar um campo de texto não significa que ele não esteja mais lá ou que o navegador não enviará seus dados quando você enviar o formulário. Tudo o que faz é esconder dos olhos do usuário.
Para realmente desativar seus campos, você deve usar o
disabled
atributo em HTML ou adisabled
propriedade DOM em JavaScript.fonte
pointer-events
ser uma propriedade CSS. FYI, épointer-events
originário de SVG .Você não pode usar CSS para desativar a Caixa de texto. solução seria o atributo HTML.
fonte
disabled
atributo não são enviados - seus valores não são postados no servidor. Leia sobre: stackoverflow.com/q/8925716/1066234A solução prática é usar CSS para realmente ocultar a entrada.
Para levar isso à sua conclusão natural, você pode escrever duas entradas html para cada entrada real (uma ativada e outra desativada) e usar o javascript para controlar o CSS para mostrá-las e ocultá-las.
fonte
primeira vez respondendo a algo, e aparentemente um pouco tarde ...
Aceito fazê-lo por javascript, se você já estiver usando.
Para uma estrutura composta, como eu costumo usar, criei um elemento pseudo após CSS para bloquear os elementos da interação do usuário e permitir o estilo sem precisar manipular toda a estrutura.
Por exemplo:
Eu posso colocar uma
disabled
aula no embrulhodiv
Isso deixaria o texto em cinza dentro do
div
e o tornaria inutilizável para o usuário.Meu exemplo JSFiddle
fonte
Eu estou sempre usando:
e, em seguida, aplicando a classe css ao campo de entrada:
fonte
Eu sei que essa pergunta é bastante antiga, mas para outros usuários que se deparam com esse problema, suponho que a maneira mais fácil de desativar a entrada é simplesmente ': disabled'
Na realidade, se você tiver algum script para desativar a entrada de forma dinâmica / automática com javascript ou jquery que seria desativado automaticamente com base na condição que você adicionar.
No jQuery, por exemplo:
Espero que a resposta em CSS ajude.
fonte
Receio que você não possa fazer isso, mas pode fazer o seguinte no jQuery, se não desejar adicionar os atributos aos campos. Coloque isso dentro da sua
<head></head>
tagSe você estiver gerando os campos no DOM (com JS), faça isso:
fonte
Isso pode ser feito para uma finalidade não crítica, colocando uma sobreposição em cima do seu elemento de entrada. Aqui está o meu exemplo em HTML e CSS puro.
https://jsfiddle.net/1tL40L99/
fonte
Não há como usar CSS para esse fim. Meu conselho é incluir um código javascript no qual você atribui ou altera a classe css aplicada às entradas. Algo parecido :
fonte
Uma variação da
pointer-events: none;
solução, que resolve o problema de a entrada ainda estar acessível por meio de controle rotulado ou tabindex, é agrupar a entrada em uma div, denominada como entrada de texto desabilitada, e definirinput { visibility: hidden; }
quando a entrada é "desabilitada" .Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/visibility#Values
O estilo desativado aplicado no snippet acima é retirado da interface do usuário do Chrome e pode não ser visualmente idêntico às entradas desativadas em outros navegadores. Possivelmente, ele pode ser personalizado para navegadores individuais usando os prefixos de extensão CSS específicos do mecanismo. Embora à primeira vista, acho que não poderia:
extensões CSS da Microsoft , extensões CSS da Mozilla , extensões CSS do WebKit
Parece muito mais sensato para introduzir um valor adicional
visibility: disabled
oudisplay: disabled
ou talvez mesmoappearance: disabled
, uma vez quevisibility: hidden
já afeta o comportamento dos elementos aplicáveis quaisquer elementos de controlo associadas.fonte