Je suis l'aide de la table de hachage pour charger du contenu dynamiquement. Pour rendre le bouton de retour du travail, je suis capturer les modifications de hachage. Cependant, parfois, j'ai besoin de changer la valeur de hachage sans déclencher le hachage changé de fonction (par exemple, lorsque la page a été redirigé côté serveur et j'ai besoin de mettre à jour la table de hachage une fois que le contenu est de retour.)
La meilleure solution est de séparer la hashchange événement, faire le changement, puis reconnectez -. Toutefois, comme cela se passe de manière asynchrone, je trouve qu'il relie, trop vite, et encore attrape le hachage de changement.
Ma solution pour le moment est très faible: une nouvelle liaison dans un setTimeout. Quelqu'un aurait-il une meilleure idée?
$(window).unbind( 'hashchange', hashChanged);
window.location.hash = "!" + url;
setTimeout(function(){
$(window).bind( 'hashchange', hashChanged);
}, 100);
Edit:
Amir Raminfar de la suggestion qui m'a incité à une solution qui ne nécessite pas de délai d'attente.
J'ai ajouté une variable de classe
_ignoreHashChange = false;
Lorsque je veux changer la valeur de hachage en silence je fais ceci:
_ignoreHashChange = true;
window.location.hash = "!" + url;
et le hachage événement a changé fait ceci :
function hashChanged(event){
if(_ignoreHashChange === false){
url = window.location.hash.slice(2);
fetchContent(url);
}
_ignoreHashChange = false;
}