Às vezes, uso âncoras denominadas botões e, às vezes, apenas uso botões. Desejo desativar cliques específicos para que:
- Eles parecem desativados
- Eles param de ser clicados
Como posso fazer isso?
jquery
html
css
twitter-bootstrap
biofractal
fonte
fonte
role="button"
em links, mas isso não parece afetar esse problema. getbootstrap.com/css/#buttonsa.btn[disabled]
aparecer desativado ainda permanecem clicável é um bug no Bootstrap IMO. O atributo[disabled]
deve aparecer apenas desativado parabutton
einput
.Respostas:
Botões
Os botões são simples de desativar, pois
disabled
é uma propriedade de botão que é manipulada pelo navegador:Para desabilitá-los com uma função jQuery personalizada, basta usar
fn.extend()
:JSFiddle botão desativado e demonstração de entrada .
Caso contrário, você faria uso do jQuery
prop()
método :Tags de âncora
Vale ressaltar que
disabled
não é uma propriedade válida para tags de âncora. Por esse motivo, o Bootstrap usa o seguinte estilo em seus.btn
elementos:Observe como a
[disabled]
propriedade é segmentada, bem como um.disabled
classe. A.disabled
classe é o que é necessário para fazer uma marca de âncora parecer desativada.Obviamente, isso não impedirá que os links funcionem quando clicados. O link acima nos levará a http://example.com . Para evitar isso, podemos adicionar um pedaço simples de código jQuery para direcionar tags âncora com a
disabled
classe a ser chamadaevent.preventDefault()
:Podemos alternar a
disabled
classe usandotoggleClass()
:Demonstração do link desativado do JSFiddle .
Combinado
Podemos então estender a função de desativação anterior feita acima para verificar o tipo de elemento que estamos tentando desativar usando
is()
. Desta forma, podemostoggleClass()
, se não é uminput
oubutton
elemento, ou alternar adisabled
propriedade se ela é:Demonstração JSFiddle combinada completa .
Vale a pena notar ainda que a função acima também funcionará em todos os tipos de entrada.
fonte
return false if $(@).prop('disabled')
manipuladores de cliques personalizados? Sem essa linha, esses manipuladores são executados independentemente.disabled
não é uma propriedade válida da marca âncora, portanto não deve ser usada. O evento de clique que eu dei é baseado na.disabled
classe, mas o que você pode usar éhasClass('disabled')
- se isso for verdadepreventDefault
,.disabled
propriedade na âncora? É um objeto dinâmico para que eu possa defini-lo e usá-lo, como se estivesse estendendo o conjunto de recursos da âncora? Atualizei minha resposta abaixo para mostrar isso. O que você acha? Isso é mau? Além disso, você precisa.off()
dopreventDefault
evento click ao reativar um link?disabled
propriedade customizada, pode usardata-*
atributos . Como o Bootstrap já aplica os mesmosdisabled
estilos de propriedade,class="disabled"
você também pode confiar na classe.preventDefault
todos os eventos de clique de âncora, precisarei desanexá-los quando o link for reativado. Ou estou entendendo mal alguma coisa?Não consigo pensar em uma maneira mais simples / fácil! ;-)
Usando tags Anchor (Links):
Para habilitar a tag Anchor:
Para desativar a marca Anchor:
fonte
Suponha que você tenha o campo de texto e o botão enviar,
Desativando:
Para desativar qualquer botão, por exemplo, enviar botão, basta adicionar o atributo desativado como,
Depois de executar a linha acima, a tag html do botão enviar ficaria assim:
Observe que o atributo 'disabled' foi adicionado .
Possibilitando:
Para ativar o botão, como quando você tem algum texto no campo de texto. Você precisará remover o atributo desativar para ativar o botão como,
Agora, o código acima removerá o atributo 'disabled'.
fonte
Sei que estou atrasado para a festa, mas para responder especificamente às duas perguntas:
"Eu só quero desativar cliques específicos para que:
Quão difícil isso pode ser? "
Eles param de clicar
1. Para os botões gosta
<button>
ou<input type="button">
você adicionar o atributo:disabled
.2. Para links, QUALQUER link ... na verdade, qualquer elemento HTML, você pode usar eventos de ponteiro CSS3 .
O suporte do navegador para eventos de ponteiro é impressionante pelo estado da arte de hoje (5/12/14). Mas geralmente precisamos oferecer suporte a navegadores herdados no domínio do IE, portanto o IE10 e abaixo NÃO suportam eventos de ponteiro: http://caniuse.com/pointer-events . Portanto, o uso de uma das soluções JavaScript mencionadas por outras pessoas aqui pode ser o caminho a percorrer para navegadores herdados.
Mais informações sobre eventos do ponteiro:
Eles parecem desativados
Obviamente, esta é uma resposta CSS, então:
1. Para botões como
<button>
ou<input type="button">
use o[attribute]
seletor:-
Aqui está uma demonstração básica com as coisas que mencionei aqui: http://jsfiddle.net/bXm5B/4/
Espero que isto ajude.
fonte
Se, como eu, você apenas deseja desativar um botão, não perca a resposta simples sutilmente oculta neste longo tópico:
fonte
@ James Donnelly forneceu uma resposta abrangente que se baseia na extensão do jQuery com uma nova função. Essa é uma ótima idéia, então eu vou adaptar o código dele para que funcione da maneira que eu preciso.
Estendendo o jQuery
Uso
O código processará um único elemento ou uma lista de elementos.
Botões e entradas suportam a
disabled
propriedade e, se definido comotrue
, parecerão desativados (graças à inicialização) e não serão acionados quando clicados.As âncoras não suportam a propriedade desativada; portanto, confiaremos no
.disabled
classe para fazê-la parecer desabilitada (graças ao bootstrap novamente) e conectamos um evento de clique padrão que impede o clique retornando false (não há necessidade depreventDefault
ver aqui ) .Nota : Você não precisa soltar esse evento ao reativar âncoras. Simplesmente remover a
.disabled
turma faz o truque.Obviamente, isso não ajuda se você anexou um manipulador de cliques personalizado ao link, algo que é muito comum ao usar o bootstrap e o jQuery. Então, para lidar com isso, vamos usar a
isDisabled()
extensão para testar a.disabled
classe, assim:Espero que ajude a simplificar um pouco as coisas.
fonte
Observe que há um problema estranho se você estiver usando os botões JS do Bootstrap e o estado 'loading'. Não sei por que isso acontece, mas aqui está como corrigi-lo.
Digamos que você tenha um botão e defina-o no estado de carregamento:
Agora você deseja retirá-lo do estado de carregamento, mas também desativá-lo (por exemplo, o botão era um botão Salvar, o estado de carregamento indicava uma validação em andamento e a validação falhou). Parece JS de Bootstrap razoável:
Infelizmente, isso redefinirá o botão, mas não o desativará. Aparentemente,
button()
executa alguma tarefa atrasada. Portanto, você também precisará adiar sua desativação:Um pouco chato, mas é um padrão que estou usando bastante.
fonte
Ótima resposta e contribuições de todos! Eu tive que estender essa função ligeiramente para incluir a desativação de elementos selecionados:
Parece estar trabalhando para mim. Obrigado a todos!
fonte
Para esse tipo de comportamento, eu sempre uso o
button
widget jQueryUI , para links e botões.Defina a tag no HTML:
Use jQuery para inicializar os botões:
Use os
button
métodos do widget para desativá-los / ativá-los:Isso cuidará do comportamento do botão e do cursor, mas se você precisar se aprofundar e alterar o estilo do botão quando desativado, substitua as seguintes classes CSS no arquivo de estilo CSS da página.
Mas lembre-se: essas classes CSS (se alteradas) também mudarão o estilo para outros widgets.
fonte
O seguinte funcionou muito bem para mim:
fonte
Esta é uma resposta bastante tardia, no entanto, me deparei com essa pergunta enquanto procurava uma maneira de desativar os botões do boostrap após clicar neles e talvez adicionar um efeito interessante (por exemplo, um girador). Eu encontrei uma ótima biblioteca que faz exatamente isso:
http://msurguy.github.io/ladda-bootstrap/
Você acabou de incluir os css e js necessários, adicionar algumas propriedades aos botões e ativar o lada com javascript ... Presto! Seus botões têm uma nova vida (verifique a demonstração para ver como é bonito)!
fonte
Isso acima não funciona porque às vezes
ajuste seu código com
fonte
Sei que minha resposta está atrasada, mas na OMI é a maneira mais fácil de alternar entre os botões 'ativar' e 'desativar'
fonte
Suponha que você tenha esses botões na página como:
O código js:
fonte
Digamos que você tenha essa aparência ativada no momento.
Apenas adicione isto:
e você vai conseguir isso que irá desativar o botão
fonte
disabled
propriedade não é uma propriedade válida para tags de âncora.Se você deseja desativar o clicável, também pode adicioná-lo em linha em html
fonte