Chrisが質問したと思うのは、ブラウザの履歴(戻る/進む)ボタンを操作しているときにのみ、window.onhashchangeイベントが機能する方法です。
答え=いいえ...しかし、if文を関数に入れることができます。
私はこれを行うだろう:
$('.nav').click(function() { //on the onclick event for your nav add a class
$(this).addClass('navClick'); // before you change the hash.
window.location.hash = 'state' + $(this).html();
});
function getLocationHash() {
return window.location.hash.substring(1);
}
window.onhashchange = function(e) { // if element does not exist with your
if ($('.navClick').length == 0) { // 'navClick' class then check hash
switch(getLocationHash()) {
case 'state1':
execute code block 1;
break;
case 'state2':
execute code block 2;
break;
default:
code to be executed if different from case 1 and 2;
}
} else { // removes the class if it does
$('.navClick').removeClass('navClick');
}
};
が、私はそれはすべてのコンテンツを動的に変更しているmy site
に似た何かをしました。私はまだwindow.location.hash
を使ってサイトの状態を把握しています。サイト内をナビゲートし、サイトが履歴内にある場合に戻るフォワードボタンを使用してナビゲートすると、後でページをリロードするのではなく、実際にナビをクリックした場合のように状態が動的に変更されます。ヒストリを使用してナビゲートしている場合のみ、ハッシュをチェックします。