我正在用这个
$(window).bind('hashchange', gotohash);
向我的应用程序添加深层链接。
我的问题是,当我单击 <a>
时它也会触发与 href=#whatever
我只想在用户使用浏览器的后退和前进按钮或直接访问包含哈希值的 url 时使用它。
我在想 hashChangeEnabled=true/false
然后在每次点击时将其关闭
但是有没有更简单的方法来检测是否是由点击引起的?
最佳实践是什么?
我的解决方案
var disableHashChange = false;
$(window).bind('hashchange', function(){
if(!disableHashChange ){
gotohash();
}
disableHashChange = false;
});
$('.link').click(function(){
disableHashChange = true;
}
回答,作者:imsky
var lastLinkEvent;
$(window).bind('hashchange', function(){
if(lastLinkEvent != window.location.hash){
gotohash();
lastLinkEvent = "";
}
});
$('.link').click(function(){
lastLinkEvent = $(this).attr('href');;
}
谢谢
最佳答案
当您更改位置时,将触发 hashchange 事件,因此,如果您不希望在单击链接时触发该事件,请更改链接 href 属性或添加使用 preventDefault
的点击处理程序。
编辑:鉴于您希望链接正常工作,您应该设置一个仅限制链接事件的应用程序变量,例如 lastLinkEvent
并将其设置为其 URL 中包含的哈希值。然后在处理函数中,检查 lastLinkEvent
是否已经是哈希值,如果是,则阻止执行。
关于jquery - 仅当非点击时才更改 hash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10063898/