Atualmente, estou usando <a>
tags com jQuery para iniciar coisas como eventos de clique etc.
Exemplo é <a href="#" class="someclass">Text</a>
Mas eu odeio como o '#' faz a página pular para o topo da página. O que posso fazer em vez disso?
javascript
jquery
html
st4ck0v3rfl0w
fonte
fonte
Respostas:
No jQuery, quando você lida com o evento click,
return false para impedir que o link responda da maneira usualimpeça a ação padrão, que é visitar ohref
atributo, (pelo comentário de PoweRoy e pela resposta de Erik ):fonte
$('a[href=#]').click(function(e) { e.preventDefault(); });
Portanto, isso é antigo, mas ... caso alguém encontre isso em uma pesquisa.
Basta usar em
"#/"
vez de"#"
e a página não irá pular.fonte
/
, não porque#/
tem algum significado. você pode fazer a mesma coisa#whateveryouwant
e evitará um salto para o topo#/
ou qualquer outra coisa, por exemplo#whatever
.você pode até escrever assim:
Não tenho a certeza que é uma maneira melhor, mas é uma maneira :)
fonte
href='javascript:;'
, mas tenha cuidado que desencadeia evento window.beforeUnload no IESolução 1: (simples)
Solução 2: (necessário
javascript
)Solução 3: (necessário
jQuery
)fonte
Você pode usar
event.preventDefault()
para evitar isso. Leia mais aqui: http://api.jquery.com/event.preventDefault/ .fonte
Basta usar em
<input type="button" />
vez de<a>
e usar CSS para estilizá-lo para parecer um link, se desejar.Os botões são criados especificamente para clicar e não precisam de nenhum atributo href.
A melhor maneira é usar a ação onload para criar o botão e anexá-lo onde for necessário via javascript; portanto, com o javascript desativado, eles não serão exibidos e não confundirão o usuário.
Quando você usa,
href="#"
você obtém vários links diferentes apontando para o mesmo local, o que não funcionará quando o agente não suportar JavaScript.fonte
#
.Se você deseja usar uma âncora, pode usar http://api.jquery.com/event.preventDefault/ como as outras respostas sugeridas.
Você também pode usar qualquer outro elemento como uma extensão e anexar o evento click a ele.
fonte
Você pode usar
#0
como href, já que0
não é permitido como um ID, a página não irá pular.fonte
fonte
Apenas use
JQUERY
fonte
Se o elemento não tiver um valor href significativo, ele não será realmente um link. Por que não usar outro elemento?
Conforme sugerido por Neothor, uma extensão é tão apropriada e, se modelada corretamente, será visivelmente óbvia como um item que pode ser clicado. Você pode até anexar um evento flutuante, para que o elemento 'acenda' à medida que o mouse do usuário se move sobre ele.
No entanto, tendo dito isso, convém repensar o design do seu site para que ele funcione sem javascript, mas seja aprimorado pelo javascript quando estiver disponível.
fonte
Os links com href = "#" quase sempre devem ser substituídos por um elemento de botão:
O uso de links com href = "#" também é uma preocupação de acessibilidade, pois esses links estarão visíveis para os leitores de tela, que lerão "Link - Texto", mas se o usuário clicar, ele não irá a lugar algum.
fonte
Você pode passar uma tag de âncora sem uma propriedade href e usar o jQuery para executar a ação necessária:
<a class="foo">bar</a>
fonte
#
, presumi que isso não é uma preocupação para você e, portanto, ofereci essa solução, pois é provavelmente o meio mais simples de atender às suas necessidades.a:link
Os seletores de CSS não direcionarão essa tag de âncora.Eu tenho usado:
fonte
O
#/
truque funciona, mas adiciona um evento histórico ao navegador. Portanto, clicar para trás não funciona como o usuário deseja / espera.$('body').click('a[href="#"]', function(e) {e.preventDefault() });
é o caminho que segui, pois funciona para conteúdo já existente e quaisquer elementos adicionados ao DOM após o carregamento.Especificamente, eu precisava fazer isso em um menu suspenso de inicialização dentro de um
.btn-group
(Referência) , então fiz:$('body').click('.dropdown-menu li a[href="#"]', function(e) {e.preventDefault() });
Dessa forma, foi direcionado e não afetou mais nada na página.
fonte
Eu sempre usei:
ao tentar impedir o salto da página. Não tenho certeza se é o melhor, mas parece que está funcionando bem há anos.
fonte
Existem quatro maneiras semelhantes de impedir que a página salte para o topo sem nenhum JavaScript:
Opção 1:
Opção 2:
Opção 3:
Opção 4 ( não recomendado ):
Mas é melhor usar
event.preventDefault()
se você estiver entregando o evento click no jQuery.fonte
Você também pode retornar false após processar seu jquery.
Por exemplo.
fonte
Eu uso algo como isto:
fonte
Para impedir que a página salte, você deve ligar
e.stopPropagation();
após ligare.preventDefault();
:stopPropagation
impede que o evento suba na árvore DOM. Mais informações aqui: https://api.jquery.com/event.stoppropagation/fonte
Se você deseja migrar para uma seção âncora na mesma página sem aumentar a página, use:
Basta usar "# /" em vez de "#", por exemplo
fonte
Adicionar algo depois
#
define o foco da página no elemento com esse ID. A solução mais simples é usar#/
mesmo se você estiver usando o jQuery. No entanto, se você estiver lidando com o evento no jQuery, esseevent.preventDefault()
é o caminho a percorrer.fonte
O
<a href="#!">Link</a>
e<a href="#/">Link</a>
não funciona se for necessário clicar na mesma entrada mais de uma vez. Leva apenas um clique de evento para cada uma em várias entradas.ainda o melhor caminho a seguir é com
<a href="#">Link</a>
então,
fonte