Javascript/jQuery仅在浏览器上单击后退/前进按钮时检测哈希更改

Javascript/jQuery仅在浏览器上单击后退/前进按钮时检测哈希更改,javascript,jquery,back,browser-history,hashchange,Javascript,Jquery,Back,Browser History,Hashchange,是否可以仅在浏览器历史记录更改(即后退或前进按钮)上检测哈希更改 我看到了onBeforeUnload事件,但该事件不会在哈希更改时触发,因为窗口没有卸载 hashchange事件显然会在哈希更改时触发。有办法吗?最好没有插件。我看过jQuery历史插件,但我正在寻找最简单的解决方案 谢谢你的帮助。你不能用哈希,甚至用HTML5历史API。没有专门与用户单击后退或前进按钮相关的事件。您可能需要一种不同的方法来解决原始问题,除非在客户端计算机上安装某种扩展或类似的扩展是可行的。看看这个事件 但是,

是否可以仅在浏览器历史记录更改(即后退或前进按钮)上检测哈希更改

我看到了onBeforeUnload事件,但该事件不会在哈希更改时触发,因为窗口没有卸载

hashchange事件显然会在哈希更改时触发。有办法吗?最好没有插件。我看过jQuery历史插件,但我正在寻找最简单的解决方案


谢谢你的帮助。

你不能用哈希,甚至用HTML5历史API。没有专门与用户单击后退或前进按钮相关的事件。您可能需要一种不同的方法来解决原始问题,除非在客户端计算机上安装某种扩展或类似的扩展是可行的。

看看这个事件

但是,目前并非所有浏览器都支持它。看看BA jQuery散列更改插件。如果你最终选择使用插件,它可能会起作用


我希望这有帮助

我有一个不同方法的建议。假设您有一个指向某个页面的链接(但使用AJAX而不刷新)。单击该链接时,您可以将哈希值更改为您喜欢的任何值。现在,当用户单击“上一步”按钮时,哈希值会变回用户单击链接之前的状态……但您可以做的是检查是否在链接或按钮上触发了单击事件(或要检查的任何选择器/事件)。如果它被触发,您知道该请求来自于对页面本身的单击。如果没有触发您正在检查的事件,则您知道单击来自后退或前进按钮

您可以做的另一件事是在哈希发生变化时(根据您对任何事件的检查,从后退或前进按钮)向哈希添加后缀。因此,如果您的哈希值为
#pageTitle
,则将其转换为
#pageTitle\u chrome
,以指示哈希值已从后退按钮或前进按钮更改


然后,当您检查哈希值时,您可以查看它是否包含
\u chrome
,以检测它是什么类型的哈希更改。

我认为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');
  }
};
我也做了类似的事情


这一切都是动态变化的内容。我仍然使用
window.location.hash
来跟踪站点状态。如果在站点中导航,然后在站点进入历史记录后开始使用“后退”按钮进行导航,则会动态更改状态,就像用户实际在导航中单击一样,而不需要随后重新加载页面。它仅在您使用历史记录进行导航时检查哈希值。

每当触发导航时,我都会标记一个标志,如果标记了该标志,hashChange事件将忽略它,否则它将像处理后退/前进事件一样处理它