jquery - 仅当非点击时才更改 hash

标签 jquery hash click

我正在用这个

$(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/

相关文章:

jquery - 设置 jQuery UI 对话框相对于打开它的元素的位置

javascript - jQuery Isotope 按数字排序错误地排序项目

javascript - 为什么我在文本区域中输入内容时收到替换函数错误

c++ - 自定义类的 unordered_set 是否有默认的哈希函数?

javascript - 禁用所有单击/按键事件,直到 ajax 调用完成

php - 将 data-* 传递给 bootstrap Modal

perl - 如何在不重复二级 key 的情况下打印出复杂的哈希值?

ruby-on-rails - Rails - 防止发布请求从数组创建多行,同时仍保留数据

css - 如何在 div 区域外点击时生效?

javascript - jQuery 单击将我带到页面顶部,但我需要留在我所在的位置