78 votes

Comment puis-je supprimer l'emplacement de hachage sans causer de la page pour faire défiler?

Est-il possible de supprimer le hachage window.location sans causer de la page pour faire défiler vers le haut? J'ai besoin d'être en mesure de modifier la valeur de hachage sans provoquer des sauts.

J'ai ceci:

$('<a href="#123">').text('link').click(function(e) {
  e.preventDefault();
  window.location.hash = this.hash;
}).appendTo('body');

$('<a href="#">').text('unlink').click(function(e) {
  e.preventDefault();
  window.location.hash = '';
}).appendTo('body');

Voir le live exemple ici: http://jsbin.com/asobi

Lorsque l'utilisateur clique surle lien' le hash tag est modifiée sans sauts de page, de sorte que fonctionne.

Mais lorsque l'utilisateur clique sur 'dissocier' a l'étiquette est enlevée et le défilement des pages-saute vers le haut. J'ai besoin de supprimer le hachage sans ce côté-effet.

97voto

scunliffe Points 30964

Je crois que si vous venez de mettre dans un mannequin de hachage de ne pas défiler comme il n'y a pas de match pour faire défiler jusqu'à.

<a href="#A4J2S9F7">No jumping</a>

ou

<a href="#_">No jumping</a>

"#" par lui-même est equivelent d' "_top" provoque ainsi un défilement vers le haut de la page

37voto

neokio Points 2461

J'utilise la suite sur quelques sites, PAS de SAUTS de PAGE!

Agréable et très propre barre d'adresse pour HTML5 amicale des navigateurs, et juste un # pour les anciens navigateurs.

$('#logo a').click(function(e){
    window.location.hash = ''; // for older browsers, leaves a # behind
    history.pushState('', document.title, window.location.pathname); // nice and clean
    e.preventDefault(); // no page reload
});

18voto

olooney Points 1245

de la fenêtre.emplacement de hachage de la propriété est stupide dans un couple des manières. C'est l'un d'entre eux; l'autre est le fait qu'elle est différente d'obtenir et de définir des valeurs:

window.location.hash = "hello";  // url now reads *.com#hello
alert(window.location.hash);   // shows "#hello", which is NOT what I set.
window.location.hash = window.location.hash; // url now reads *.com##hello

Notez que la définition de la table de hachage à la propriété " supprime la marque de hachage trop; c'est ce qui redirige la page. Pour définir la valeur de hachage de la partie de l'url ", laissant la marque de hachage et donc pas rafraîchissant, écrire ceci:

window.location.href = window.location.href.replace(/#.*$/, '#');

Il n'y a aucun moyen de supprimer complètement la marque de hachage une fois défini, sans rafraichissement de la page.

Mise à JOUR 2012:

Comme Blazemonger et thinkdj l'ont souligné, la technologie s'est améliorée. Certains navigateurs ne permet d'effacer qu'hashtag, mais certains ne le font pas. Pour soutenir à la fois, essayez quelque chose comme:

if ( window.history && window.history.pushState ) { 
    window.history.pushState('', '', window.location.pathname) 
} else { 
    window.location.href = window.location.href.replace(/#.*$/, '#'); 
}

3voto

Tomer Gal Points 107

C'est un vieux post, mais je voulais partager ma solution Tous les liens dans mon projet que d'être manipulé par les JS sont avoir href="#_js" attribut (ou quel que soit le nom que vous souhaitez utiliser pour qui seulement), et sur la page d'initialisation je fais:

$('body').on('click.a[href="#_js"]', function() {
    return false;
});

Que va faire l'affaire

1voto

Roman Nurik Points 18632

Avez-vous essayé d' return false; dans le gestionnaire d'événement? jQuery fait quelque chose de spécial quand vous faites cela, semblable à, mais autant que je sache, plus efficace, plus que e.preventDefault.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X