Aparentemente, um deficiente <input>
não é tratado por nenhum evento
Existe uma maneira de contornar esse problema?
<input type="text" disabled="disabled" name="test" value="test" />
$(':input').click(function () {
$(this).removeAttr('disabled');
})
Aqui, preciso clicar na entrada para habilitá-la. Mas se eu não ativá-lo, a entrada não deve ser postada.
javascript
jquery
html
Pierre de LESPINAY
fonte
fonte
Respostas:
Elementos desativados não acionam eventos do mouse. A maioria dos navegadores propagará um evento originado do elemento desativado na árvore DOM, para que os manipuladores de eventos possam ser colocados nos elementos do contêiner. No entanto, o Firefox não exibe esse comportamento, apenas não faz nada quando você clica em um elemento desativado.
Não consigo pensar em uma solução melhor, mas, para uma compatibilidade completa entre navegadores, você pode colocar um elemento na frente da entrada desativada e clicar no elemento. Aqui está um exemplo do que quero dizer:
jq:
Exemplo: http://jsfiddle.net/RXqAm/170/ (atualizado para usar o jQuery 1.7 em
prop
vez deattr
).fonte
disabled
atributo sem valor, isso implica HTML em vez de XHTML; nesse caso, a barra final é desnecessária.mouseenter
, Etc.)input[disabled] {pointer-events:none}
seu CSS. Em seguida, o clique se comporta como se você tivesse clicado no elemento pai. IMHO esta é a solução mais simples, mais limpa, mas infelizmente só funciona para navegadores que suportam apointer-events
propriedade CSS: caniuse.com/#search=pointer-eventsTalvez você possa tornar o campo somente leitura e, ao enviar, desabilitar todos os campos somente leitura
e a entrada (+ script) deve ser
fonte
Elementos desativados "comem" cliques em alguns navegadores - eles não respondem a eles nem permitem que sejam capturados pelos manipuladores de eventos em qualquer lugar do elemento ou de seus contêineres.
IMHO, a maneira mais simples e limpa de "consertar" isso (se você realmente precisa capturar cliques em elementos desabilitados como o OP faz) é apenas adicionar o seguinte CSS à sua página:
Isso fará com que todos os cliques em uma entrada desabilitada caiam no elemento pai, onde você pode capturá-los normalmente. (Se você tiver várias entradas desativadas, poderá colocar cada uma em um contêiner individual próprio, se elas ainda não estiverem dispostas dessa maneira - uma extra
<span>
ou uma<div>
, digamos - apenas para facilitar a distinção de quais entradas desativadas foi clicado).A desvantagem é que, infelizmente, esse truque não funciona em navegadores antigos que não suportam a
pointer-events
propriedade CSS. (Ele deve funcionar no IE 11, FF v3.6, Chrome v4): caniuse.com/#search=pointer-eventsSe você precisar dar suporte a navegadores mais antigos, precisará usar uma das outras respostas!
fonte
input[disabled]
também corresponderia aos elementos desativados pelo JavaScript (element.disabled = true;
), mas parece que sim. Enfim, achoinput:disabled
mais limpo.Eu sugeriria uma alternativa - use CSS:
em vez do atributo desativado. Em seguida, você pode adicionar seus próprios atributos CSS para simular uma entrada desativada, mas com mais controle.
fonte
fonte
Em vez de
disabled
, você pode considerar usarreadonly
. Com algum CSS extra, você pode estilizar a entrada para que ela pareça umdisabled
campo.Na verdade, há outro problema. O evento
change
somente dispara quando o elemento perde o foco, o que não é lógico considerando umdisabled
campo. Provavelmente você está enviando dados para esse campo a partir de outra chamada. Para fazer isso funcionar, você pode usar o evento 'bind'.fonte
OU faça isso com jQuery e CSS!
Dessa forma, você faz com que o elemento pareça desabilitado e nenhum evento de ponteiro será acionado, mas ele permitirá a propagação e, se enviado, você poderá usar o atributo 'ignorar' para ignorá-lo.
fonte
Hoje tivemos um problema como este, mas não queríamos mudar o HTML. Então, usamos o evento mouseenter para conseguir isso
fonte
Eu encontro outra solução:
A classe "desabilitada" imita o elemento desabilitado por opacidade:
E, em seguida, cancele o evento se o elemento estiver desativado e remova a classe:
fonte
sugestão aqui parece um bom candidato para esta pergunta também
Realizando evento de clique em um elemento desativado? Javascript jQuery
fonte