当用户点击同一链接时,Hashchange不会触发

时间:2011-12-27 07:41:51

标签: javascript browser-history hashchange

我正在创建一个HTML和Javascript客户端,用于在与REST API对话的浏览器中运行。我正在使用RouteMap来设置我的网址。所以我保留了类似这样的约定

http://mysite.com/#/{ResourceName}/[edit|view|list]/[Id]/

我只设置了一条路线,并且我正在将函数绑定到hashchange中。大多数事情都很好。只是两个问题,我因为他们而陷入困境。

  1. 如果用户点击两次相同的链接,则不会触发hashchange事件。是的,哈希没有改变,所以很明显它不会发射。但是应该有一些事情可以做,而我却错过了。
  2. 如果我在UI中更改某些内容(比如调出新的div并隐藏一些内容),我不想更改哈希链接,我会松开该历史记录,并且无法通过正确单击后退按钮返回。
  3. 任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

对于#1,您可能希望将处理程序附加到链接单击事件。这样你就可以判断链接是否被点击了。当我使用onhashchange时,我总是在click事件上添加一些内容以帮助polyfill进行onhashchange,所以至少我可以判断它什么时候失败。

对于#2,我想指出自动更改用户的历史记录是有问题的。你可以用微小的,毫无意义的哈希变化填补某人的历史。我建议仅在用户实际交互时更改历史记录。除此之外,HTML5确实提供pushStatepopStateReference