2

我正在使用这个

$(window).bind('hashchange', gotohash);

为我的应用添加深层链接。

<a>我的问题是,当我单击with时它也会触发,href=#whatever 我只想在用户使用浏览器的后退和前进按钮或直接转到其中包含哈希的 url 时使用它。

我正在考虑hashChangeEnabled=true/false然后在每次点击时将其关闭

但是有没有更简单的方法来检测它是否是由点击引起的?

最佳做法是什么?


我的解决方案

var disableHashChange = false;

$(window).bind('hashchange', function(){
  if(!disableHashChange ){
    gotohash();
  }
  disableHashChange = false;
});

$('.link').click(function(){
  disableHashChange = true;
}

伊姆斯基的回答

var lastLinkEvent;

$(window).bind('hashchange', function(){
  if(lastLinkEvent != window.location.hash){
    gotohash();
    lastLinkEvent = "";
  }
});

$('.link').click(function(){
    lastLinkEvent = $(this).attr('href');;
}

谢谢

4

2 回答 2

3

hashchange 事件将在您更改位置时触发,因此如果您不希望在单击链接时触发它,请更改链接 href 属性或添加使用preventDefault.

编辑:鉴于您希望链接正常工作,您应该设置一个仅限于链接事件的应用程序变量,例如lastLinkEvent并将其设置为包含在其 URL 中的哈希值。然后在您的处理函数中,检查是否lastLinkEvent已经是哈希,如果是,则阻止执行。

于 2012-04-08T15:27:11.417 回答
0

只需检查当前目标是否是一个锚标签或不在 hashchange 内

http://api.jquery.com/event.currentTarget/

于 2012-04-08T15:22:45.977 回答