56 votes

Changer le hash sans recharger en jquery

J'ai le code suivant:-

 $('ul.questions li a').click(function(event) {
	$('.tab').hide();
	$($(this).attr('href')).fadeIn('slow');
	event.preventDefault();
	window.location.hash = $(this).attr('href');
});
 

Cela a simplement pour effet de fondre une div en fonction du moment où vous cliquez, mais je souhaite que la balise de hachage de la page soit modifiée lorsque vous cliquez dessus afin que les utilisateurs puissent la copier et la mettre en favori. Pour le moment, la page est rechargée lorsque la balise de hachage est modifiée.

Est-il possible de changer la balise de hachage et de ne pas recharger la page pour empêcher l'effet de saut?

Merci

Dave.

85voto

jitter Points 35805

Ça marche pour moi

 $('ul.questions li a').click(function(event) {
    event.preventDefault();
    $('.tab').hide();
    window.location.hash = this.hash;
    $($(this).attr('href')).fadeIn('slow');
});
 

Consultez ici http://jsbin.com/edicu pour une démonstration avec un code presque identique

4voto

James Wiseman Points 18347

Vous pouvez essayer de capturer l'événement onload. Et arrêter la propagation dépend d'un drapeau.

 var changeHash = false;

$('ul.questions li a').click(function(event) {
    var $this = $(this)
    $('.tab').hide();  //you can improve the speed of this selector.
    $($this.attr('href')).fadeIn('slow');
    StopEvent(event);  //notice I've changed this
    changeHash = true;
    window.location.hash = $this.attr('href');
});

$(window).onload(function(event){
    if (changeHash){
        changeHash = false;
        StopEvent(event);
    }
}

function StopEvent(event){
    event.preventDefault();
    event.stopPropagation();
    if ($.browser.msie) {
        event.originalEvent.keyCode = 0;
        event.originalEvent.cancelBubble = true;
        event.originalEvent.returnValue = false;
    }
}
 

Non testé, donc ne peut pas dire si cela fonctionnerait

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