Eu tenho um botão de link dentro do <td>
qual tenho que desativar. Isso funciona no IE, mas não funciona no Firefox e Chrome. Estrutura é - Link dentro de a <td>
. Não consigo adicionar nenhum contêiner no <td>
(como div / span)
Eu tentei o seguinte, mas não funcionei no Firefox (usando 1.4.2 js):
$(td).children().each(function () {
$(this).attr('disabled', 'disabled');
});
$(td).children().attr('disabled', 'disabled');
$(td).children().attr('disabled', true);
$(td).children().attr('disabled', 'true');
Nota - Não consigo cancelar o registro da função de clique para a marca de âncora, pois ela é registrada dinamicamente. E tenho que mostrar o link no modo desativado.
javascript
jquery
html
css
Ankit
fonte
fonte
Respostas:
Você não pode desativar um link (de maneira portátil). Você pode usar uma dessas técnicas (cada uma com seus próprios benefícios e desvantagens).
Maneira CSS
Esse deve ser o caminho certo (mas veja mais adiante) quando a maioria dos navegadores oferecer suporte:
É o que, por exemplo, o Bootstrap 3.x faz. Atualmente (2016), é bem suportado apenas pelo Chrome, FireFox e Opera (19+). O Internet Explorer começou a oferecer suporte a partir da versão 11, mas não para links, mas está disponível em um elemento externo como:
Com:
Gambiarra
Provavelmente, precisamos definir uma classe CSS para,
pointer-events: none
mas e se reutilizarmos odisabled
atributo em vez de uma classe CSS? A rigor,disabled
não há suporte para,<a>
mas os navegadores não reclamam por atributos desconhecidos . O uso dodisabled
atributo IE ignorará,pointer-events
mas honrará odisabled
atributo específico do IE ; outros navegadores compatíveis com CSS ignoram atributo e honra desconhecidos . Mais fácil escrever do que explicar:disabled
pointer-events
Outra opção para o IE 11 é definir
display
elementos de link parablock
ouinline-block
:Observe que essa pode ser uma solução portátil se você precisar dar suporte ao IE (e pode alterar seu HTML), mas ...
Tudo isso dito, observe que
pointer-events
desativa apenas ... eventos de ponteiro. Os links ainda poderão ser navegados pelo teclado; também é necessário aplicar uma das outras técnicas descritas aqui.Foco
Em conjunto com a técnica CSS descrita acima, você pode usar de
tabindex
maneira não padrão para impedir que um elemento seja focado:Nunca verifiquei sua compatibilidade com muitos navegadores; talvez você queira testá-lo antes de usar isso. Tem a vantagem de trabalhar sem JavaScript. Infelizmente (mas obviamente)
tabindex
não pode ser alterado do CSS.Interceptar cliques
Use a
href
para uma função JavaScript, verifique a condição (ou o próprio atributo desativado) e não faça nada.Para desativar os links, faça o seguinte:
Para reativá-los:
Se você quiser, em vez de
.is("[disabled]")
usar, o.attr("disabled") != undefined
jQuery 1.6+ sempre retornaráundefined
quando o atributo não estiver definido, masis()
é muito mais claro (obrigado a Dave Stewart por esta dica). Observe aqui que estou usando odisabled
atributo de uma maneira não padrão; se você se importa com isso, substitua o atributo por uma classe e substitua.is("[disabled]")
por.hasClass("disabled")
(adicionando e removendo comaddClass()
eremoveClass()
).Zoltán Tamási observou em um comentário que "em alguns casos o evento click já está vinculado a alguma função" real "(por exemplo, usando knockoutjs). Nesse caso, a ordem do manipulador de eventos pode causar alguns problemas. Portanto, implementei links desabilitados vinculando um retorno falsa manipulador do link
touchstart
,mousedown
ekeydown
eventos. ele tem alguns inconvenientes (que irá impedir toque rolagem começou no link)" , mas lidar com eventos de teclado também tem a vantagem de evitar a navegação pelo teclado.Observe que, se
href
não estiver limpo, é possível que o usuário visite manualmente essa página.Limpe o link
Limpe o
href
atributo. Com esse código, você não adiciona um manipulador de eventos, mas altera o próprio link. Use este código para desativar os links:E este para reativá-los:
Pessoalmente, eu não gosto muito dessa solução (se você não precisar fazer mais com links desabilitados), mas ela pode ser mais compatível por causa de várias maneiras de seguir um link.
Manipulador de clique falso
Adicione / remova uma
onclick
função em que vocêreturn false
, o link não será seguido. Para desativar os links:Para reativá-los:
Não acho que exista uma razão para preferir esta solução em vez da primeira.
Styling
O estilo é ainda mais simples, qualquer que seja a solução usada para desativar o link, adicionamos um
disabled
atributo para que você possa usar a seguinte regra CSS:Se você estiver usando uma classe em vez de atributo:
Se você estiver usando uma estrutura de interface do usuário, poderá ver que os links desabilitados não estão estilizados corretamente. O Bootstrap 3.x, por exemplo, lida com esse cenário e o botão é estilizado corretamente com
disabled
atributo e com.disabled
classe. Se, em vez disso, você estiver limpando o link (ou usando uma das outras técnicas de JavaScript), também deverá manipular o estilo, porque um<a>
semhref
ainda será pintado como ativado.Aplicativos avançados para Internet acessíveis (ARIA)
Não se esqueça de incluir também um atributo
aria-disabled="true"
junto com odisabled
atributo / classe.fonte
td a
s que pode ser desativado, que irá chamarevent.preventDefault()
, se$(this).data('disabled')
é verdade, e em seguida, definadata('disabled', true)
a qualquer link Quero desativar (falso para permitir, etc.)$(this).is('[disabled]')
pode ser uma maneira mais agradável para detectar o atributo desativadoConsegui a correção em css.
Acima de css, quando aplicado à tag anchor, desativará o evento click.
Para mais detalhes, confira este link
fonte
Obrigado a todos que publicaram soluções (especialmente @AdrianoRepetti), eu combinei várias abordagens para fornecer algumas mais avançadas
disabled
funcionalidades (e funciona em vários navegadores). O código está abaixo (ES2015 e coffeescript com base em sua preferência).Isso fornece vários níveis de defesa para que as âncoras marcadas como desativadas realmente se comportem como tais. Usando essa abordagem, você obtém uma âncora que não pode:
Como
Inclua esse css, pois é a primeira linha de defesa. Isso pressupõe que o seletor usado seja
a.disabled
Em seguida, instancie esta classe em ready (com seletor opcional):
Classe ES2015
npm install -S key.js
Classe Coffescript:
fonte
Experimente o elemento:
Desativar um link funciona para mim no Chrome: http://jsfiddle.net/KeesCBakker/LGYpz/ .
O Firefox não parece ter um bom desempenho. Este exemplo funciona:
Nota: adicionada uma declaração 'ao vivo' para futuros links desativados / ativados.
Nota2: alterado 'ao vivo' para 'ligado'.
fonte
O Bootstrap 4.1 fornece uma classe denominada
disabled
earia-disabled="true"
atributo.exemplo"
Mais está em getbootstrap.com
Então, se você quiser fazer dinamicamente, e depois
you don't want to care if it is button or ancor
no script JS, precisará de algo assimMas tenha cuidado
A solução funciona apenas em links com classes
btn btn-link
.Às vezes, o bootstrap recomenda o uso da
card-link
classe; nesse caso, a solução não funcionará .fonte
Acabei com a solução abaixo, que pode funcionar com um atributo
<a href="..." disabled="disabled">
ou uma classe<a href="..." class="disabled">
:Estilos CSS:
Javascript (em jQuery pronto):
fonte
você não pode desativar um link, se desejar que o evento de clique não seja acionado, basta clicar
Remove
noaction
link.Para obter mais informações: - Elementos que podem ser desativados
fonte
Eu faria algo como
algo assim deve funcionar. Você adiciona uma classe aos links que deseja desabilitar e retorna falso quando alguém clica neles. Para habilitá-los basta remover a classe.
fonte
Para desativar o link para acessar outra página no dispositivo de toque:
fonte
setAttribute('href', '');
e o URL da página foremhttp://example.com/page/?query=something
o link ao clicar no IE11http://example.com/page/
. Uma solução poderia ser a de usarsetAttribute('href', '#');
No Razor (.cshtml) você pode fazer:
fonte
Você pode usar isso para desabilitar o hiperlink do asp.net ou os botões de link em html.
fonte
Existe uma outra maneira possível, e a que eu mais gosto. Basicamente, é da mesma maneira que o lightbox desativa uma página inteira, colocando uma div e mexendo no z-index. Aqui estão trechos relevantes de um projeto meu. Isso funciona em todos os navegadores !!!!!
Javascript (jQuery):
e em html
Assim, o redimensionador encontra os locais da âncora (as imagens são apenas setas) e coloca o desativador no topo. A imagem do desabilitador é um quadrado cinza translúcido (altere a largura / altura dos desabilitadores no html para corresponder ao seu link) para mostrar que está desabilitado. A flutuação permite que a página seja redimensionada dinamicamente, e os desabilitadores seguirão o exemplo em windowResizer (). Você pode encontrar imagens adequadas no google. Coloquei o CSS relevante em linha para simplificar.
então com base em alguma condição,
fonte
Eu acho que muitos deles estão pensando demais. Adicione uma classe do que você quiser, como
disabled_link
.Em seguida, faça com que o CSS tenha o
.disabled_link { display: none }
Boom agora, o usuário não pode ver o link, para que você não precise se preocupar com o clique nele. Se eles fazem algo para satisfazer o link sendo clicável, basta remover a classe com jQuery:
$("a.disabled_link").removeClass("super_disabled")
. Crescimento feito!fonte
$("td a").each(function(i,v){ $(this).data('href',this.href); $(this).attr('href','#').css('color','grey'); });
Então, quando você quer um undisable:$(this).attr('href',$(this).data('href')).css('color','blue');