87 votes

jQuery - événement hashchange

J'utilise:

 $(window).bind( 'hashchange', function(e) { });
 

pour lier une fonction à l'événement de changement de hachage. Cela semble fonctionner dans IE8, Firefox et Chrome, mais pas dans Safari et, je suppose, pas dans les versions antérieures d’IE. Pour ces navigateurs, je souhaite désactiver mon code JavaScript qui utilise les événements de hachage et hashchange .

Est-il possible de détecter avec jQuery si le navigateur prend en charge l'événement hashchange ? Peut-être quelque chose avec jQuery.support ...

69voto

CMS Points 315406

Vous pouvez détecter si le navigateur prend en charge les cas par:

if ("onhashchange" in window) {
  //...
}

Voir aussi:

18voto

James Westgate Points 6789

Il existe un plug-in de hachage qui résume les problèmes de fonctionnalité et de navigation croisée disponibles ici .

18voto

james.garriss Points 3647

Une approche différente de votre problème ...

Il existe 3 façons de lier l'événement hashchange à une méthode:

 <script>
    window.onhashchange = doThisWhenTheHashChanges;
</script>
 

Ou

 <script>
    window.addEventListener("hashchange", doThisWhenTheHashChanges, false);
</script>
 

Ou

 <body onhashchange="doThisWhenTheHashChanges();">
 

Ils fonctionnent tous avec IE 9, FF 5, Safari 5 et Chrome 12 sur Win 7.

8voto

Paul Lan Points 179

essayez le site officiel de Mozilla: https://developer.mozilla.org/en/DOM/window.onhashchange

citer comme suit:

 if ("onhashchange" in window) {
    alert("The browser supports the hashchange event!");
}

function locationHashChanged() {
    if (location.hash === "#somecoolfeature") {
        somecoolfeature();
    }
}

window.onhashchange = locationHashChanged;
 

3voto

johnny.rodgers Points 286

Je viens de rencontrer le même problème (manque d'événement hashchange dans IE7). Une solution de contournement adaptée à mes besoins était de lier l'événement click des liens qui changent de hachage.

 <a class='hash-changer' href='#foo'>Foo</a>

<script type='text/javascript'>

if (("onhashchange" in window) && !($.browser.msie)) { 

    //modern browsers 
    $(window).bind('hashchange', function() {
        var hash = window.location.hash.replace(/^#/,'');
        //do whatever you need with the hash
    });

} else {

    //IE and browsers that don't support hashchange
    $('a.hash-changer').bind('click', function() {
        var hash = $(this).attr('href').replace(/^#/,'');
        //do whatever you need with the hash
    });

}

</script>
 

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