Javascript Window.onpopstate它';已激活所有href链接

Javascript Window.onpopstate它';已激活所有href链接,javascript,javascript-events,Javascript,Javascript Events,我正在使用jquery ajax实现分页,但要操纵浏览器的历史记录。。到目前为止效果还不错,但几个小时前我意识到,如果我的页面的任何部分都有链接 <a href="#">My link</a> 我用这些函数来推动状态 history.pushState({type: 'pagination', page: number_page}, "", "?page="+number_page); history.pushState({type: 'country', page:

我正在使用jquery ajax实现分页,但要操纵浏览器的历史记录。。到目前为止效果还不错,但几个小时前我意识到,如果我的页面的任何部分都有链接

<a href="#">My link</a>
我用这些函数来推动状态

history.pushState({type: 'pagination', page: number_page}, "", "?page="+number_page);
history.pushState({type: 'country', page: number_page, country: country}, "", "?country="+country+"&page="+number_page);
history.pushState({type: 'search', page: number_page, term: term}, "", "?search="+term+"&page="+number_page);
如以下文件所述:

1.当活动历史记录条目更改时,将触发popstate事件。如果 正在激活的历史记录条目是通过调用创建的 history.pushState()或受调用的影响 replaceState(),popstate事件的状态属性包含 历史记录条目的状态对象的副本

2.请注意,只需调用history.pushState()或history.replaceState() 不会触发popstate事件。popstate事件仅被触发 通过执行浏览器操作,如单击后退按钮(或 在JavaScript中调用history.back()

激发window.onpopstate的原因是,首先,当您单击锚标记时,历史记录已更改;第二,您正在执行浏览器操作

在我看来,无法采取任何措施来避免这种情况,正如以下文件所述:

某些事件会导致服务器执行关联的默认操作 网络浏览器。例如,当标记上发生单击事件时 浏览器的默认操作是跟随超链接。默认操作 只有在事件的所有三个阶段之后才能执行类似的操作 传播完成,并且在事件期间调用任何处理程序 传播有机会阻止默认操作 通过调用事件对象的preventDefault()方法发生

这三个阶段是:捕获、瞄准和冒泡


希望有用

嗯,这就是
window.onpopstate
所做的,它会在URL更改(或者更准确地说是历史记录)时触发,包括单击锚?我明白了,这是我第一次使用此事件。。。你知道有什么方法可以避免这个或是一个诡计之类的事情吗?谢谢你提供的信息,现在我正在为我的页面中的每个href添加函数,或者将href改为btn以避免这种情况。@你说“无法避免这种情况”,同时你提出了一个有效的解决方案,这让我感到困惑:)正如你所引用的,只需附加一个click事件处理程序并防止默认行为:)
history.pushState({type: 'pagination', page: number_page}, "", "?page="+number_page);
history.pushState({type: 'country', page: number_page, country: country}, "", "?country="+country+"&page="+number_page);
history.pushState({type: 'search', page: number_page, term: term}, "", "?search="+term+"&page="+number_page);