Obrigado por todas as suas respostas, Ainda não está funcionando, então Você pode fazê-lo funcionar com a função document.ready #
Senthil Kumar Bhaskaran
Pode ajudar se você postar o trecho de código que não está funcionando.
Hooray estou ajudando
Na verdade, minha codificação está no Rails e minha codificação é <% = foo.add_associated_link ('Adicionar email', @ project.email.build)%> quando o processo no navegador, posso ver o email, mas não consigo desabilitá-lo. tentou com a codificação, como e.preventDefault () mas sem resultado
Senthil Kumar Bhaskaran
Respostas:
194
Para impedir que uma âncora siga o especificado href, sugiro usar preventDefault():
Eu tentei com os "attr" que está funcionando apenas no elemento de formulário e não na marca Anchor.
Senthil Kumar Bhaskaran
1
@senthil - preventDefault é considerado a maneira 'correta' de fazer isso, consulte a minha edição (link para outro Q + A)
karim79
Na verdade, minha codificação está no Rails e minha codificação é <% = foo.add_associated_link ('Adicionar email', @ project.email.build)%> quando o processo no navegador, posso ver o email, mas não consigo desabilitá-lo. tentou com a codificação, como e.preventDefault () mas sem resultado
Senthil Kumar Bhaskaran
2
como faço para reverter $('a.something').on("click", function (e) { e.preventDefault(); });?
アレックス
2
Discordo, use CSS "eventos-ponteiro: nenhum;" em vez disso, assim como em outros movimentos.
Vitrilo 02/02
116
O aplicativo no qual estou trabalhando atualmente faz isso com um estilo CSS em combinação com javascript.
a.disabled { color:gray;}
Sempre que eu quiser desativar um link, eu chamo
$('thelink').addClass('disabled');
Em seguida, no manipulador de cliques para 'thelink' uma tag, sempre executo uma verificação
Essa última linha não deveria dizer "retornar falso"?
Prestaul 13/10/10
1
Boa ligação, Prestaul. Quando vinculado a uma tag <a>, estou usando: <a href="whatever" onclick="return disableLink(this)"> .. then: function disableLink (node) {if (dojo.hasClass (node, 'disabled') return false; dojo.addClass (node, 'disabled'); return true;} .. isso permite que o link seja clicado uma vez e action (return true) e depois não permita a ação (retorna false).
Neek
Observe que no manipulador você provavelmente deve usar $ (this) em vez de $ ("thelink"), pois isso pode mudar ou o usuário pode copiar / colar facilmente o código.
Alexis Wilke #
2
Sugira que você também adicione 'cursor: default' ao estilo desativado.
Stuart Hallows
40
Encontrei uma resposta que gosto muito melhor aqui
Acho que uma solução melhor é definir o atributo de dados desativados e ancorar uma verificação no clique. Dessa forma, podemos desativar temporariamente uma âncora até que, por exemplo, o javascript termine com uma chamada ajax ou alguns cálculos. Se não desativá-lo, podemos clicar rapidamente algumas vezes, o que é indesejável ...
$('a').live('click',function(){var anchor = $(this);if(anchor.data("disabled")){returnfalse;}
anchor.data("disabled","disabled");
$.ajax({
url: url,
data: data,
cache:false,
success:function(json){// when it's done, we enable the anchor again
anchor.removeData("disabled");},
error:function(){// there was an error, enable the anchor
anchor.removeData("disabled");}});returnfalse;});
Também com eventos de ponteiro, você não precisará incluir o estado: hover, pois esse é um evento de ponteiro. Você só precisa incluir o seletor a [desativado].
Para situações em que você deve colocar conteúdo de texto ou html em uma tag de âncora, mas simplesmente não deseja que nenhuma ação seja tomada quando esse elemento é clicado (como quando você deseja que um link de paginador esteja no estado desativado porque é a página atual), basta cortar o href. ;)
<a>3 (current page, I'm totally disabled!)</a>
A resposta de @ michael-meadows me deu uma dica disso, mas ele ainda estava abordando cenários em que você ainda precisa / está trabalhando com jQuery / JS. Nesse caso, se você tiver controle sobre como escrever o próprio html, basta x-ing a tag href, basta fazer isso; portanto, a solução é HTML pura!
Outras soluções sem a finagling do jQuery que mantêm o href exigem que você coloque um # no href, mas isso faz com que a página salte para o topo e você deseja que ela fique desabilitada. Ou deixá-lo vazio, mas, dependendo do navegador, isso ainda funciona como pular para o topo e é HTML inválido de acordo com os IDEs. Mas, aparentemente, uma atag é um HTML totalmente válido sem um HREF.
Por fim, você pode dizer: Ok, por que não simplesmente despejar a tag a? Como muitas vezes você não pode, a atag é usada para fins de estilo na estrutura CSS ou controle que você está usando, como o paginador do Bootstrap:
usando jquery, você poderá fazer isso quando precisar exibir texto em vez de um link.
var content = $(".MyLink").text();// or .html()
$(".MyLink").replaceWith("<div>"+ content +"</div>")
Dessa forma, podemos simplesmente substituir a marca âncora por uma marca div. Isso é muito mais fácil (apenas 2 linhas) e semanticamente correto também (porque não precisamos de um link agora, portanto, não devemos ter um link)
Respostas:
Para impedir que uma âncora siga o especificado
href
, sugiro usarpreventDefault()
:Vejo:
http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29
Veja também esta pergunta anterior no SO:
jQuery desativar um link
fonte
$('a.something').on("click", function (e) { e.preventDefault(); });
?O aplicativo no qual estou trabalhando atualmente faz isso com um estilo CSS em combinação com javascript.
Sempre que eu quiser desativar um link, eu chamo
Em seguida, no manipulador de cliques para 'thelink' uma tag, sempre executo uma verificação
fonte
Encontrei uma resposta que gosto muito melhor aqui
Se parece com isso:
A ativação envolveria a configuração do atributo href
Isso dá a aparência de que o elemento âncora se torna texto normal e vice-versa.
fonte
fonte
Acho que uma solução melhor é definir o atributo de dados desativados e ancorar uma verificação no clique. Dessa forma, podemos desativar temporariamente uma âncora até que, por exemplo, o javascript termine com uma chamada ajax ou alguns cálculos. Se não desativá-lo, podemos clicar rapidamente algumas vezes, o que é indesejável ...
Fiz um exemplo do jsfiddle: http://jsfiddle.net/wgZ59/76/
fonte
A resposta selecionada não é boa.
Use o estilo CSS de ponteiro-evento . (Como Rashad Annara sugeriu)
Consulte MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events . É suportado na maioria dos navegadores.
A simples adição do atributo "disabled" à âncora fará o trabalho se você tiver uma regra CSS global como a seguir:
fonte
Experimente as linhas abaixo
Porque mesmo se você desabilitar a
<a>
taghref
funcionará, é necessário removerhref
também.Quando você deseja ativar, tente abaixo das linhas
fonte
É tão simples quanto retornar falso;
ex.
ou
fonte
No arquivo css
fonte
Se esse método for chamado, a ação padrão do evento não será acionada.
fonte
Se você está tentando bloquear toda a interação com a página, consulte o plug-in jQuery BlockUI
fonte
Você nunca especificou realmente como os queria desativados ou o que causaria a desativação.
Primeiro, você deseja descobrir como definir o valor como desativado, para isso, você usaria as Funções de Atributo do JQuery e fará com que essa função ocorra em um evento , como um clique ou o carregamento do documento.
fonte
Para situações em que você deve colocar conteúdo de texto ou html em uma tag de âncora, mas simplesmente não deseja que nenhuma ação seja tomada quando esse elemento é clicado (como quando você deseja que um link de paginador esteja no estado desativado porque é a página atual), basta cortar o href. ;)
A resposta de @ michael-meadows me deu uma dica disso, mas ele ainda estava abordando cenários em que você ainda precisa / está trabalhando com jQuery / JS. Nesse caso, se você tiver controle sobre como escrever o próprio html, basta x-ing a tag href, basta fazer isso; portanto, a solução é HTML pura!
Outras soluções sem a finagling do jQuery que mantêm o href exigem que você coloque um # no href, mas isso faz com que a página salte para o topo e você deseja que ela fique desabilitada. Ou deixá-lo vazio, mas, dependendo do navegador, isso ainda funciona como pular para o topo e é HTML inválido de acordo com os IDEs. Mas, aparentemente, uma
a
tag é um HTML totalmente válido sem um HREF.Por fim, você pode dizer: Ok, por que não simplesmente despejar a tag a? Como muitas vezes você não pode, a
a
tag é usada para fins de estilo na estrutura CSS ou controle que você está usando, como o paginador do Bootstrap:http://twitter.github.io/bootstrap/components.html#pagination
fonte
Então, com uma combinação das respostas acima, eu vim com isso.
fonte
Se você não precisa se comportar como uma marca de âncora, eu preferiria substituí-lo. Por exemplo, se sua tag âncora é como
usando jquery, você poderá fazer isso quando precisar exibir texto em vez de um link.
Dessa forma, podemos simplesmente substituir a marca âncora por uma marca div. Isso é muito mais fácil (apenas 2 linhas) e semanticamente correto também (porque não precisamos de um link agora, portanto, não devemos ter um link)
fonte
Desativar ou ativar qualquer elemento com a propriedade desativada.
fonte