【问题标题】:Prevent default hash behavior on page load防止页面加载时的默认哈希行为
【发布时间】:2011-03-31 00:49:19
【问题描述】:

我有一个带有选项卡式界面的页面。每个选项卡都有一个唯一的 ID。我已经启用了指向该页面的链接,并在哈希后附加了 id,现在我正在尝试规避默认浏览器行为,即在页面上元素的位置打开带有哈希的 URL。

所以:

  • pageA 链接到 pageB,如下所示:<a href="pageB.php#Tab4">Go</a>
  • pageB 打开,我的 jQuery 激活了正确的选项卡,但浏览器已向下滚动到页面上 &lt;div id="Tab4"&gt; 所在的位置。

这正是我想要阻止的。

有什么想法吗? 谢谢!

【问题讨论】:

    标签: jquery


    【解决方案1】:

    没有办法阻止默认哈希行为,但您可以更改哈希方案,使#tag 不对应于您页面上的任何 ID。在页面加载时,获取哈希值并附加一个常量(例如:_hash),然后使用 jQuery 滚动到该值。

    示例: http://mysite/page.php#tab4

    page.php 有&lt;div id="tab4_hash"&gt;&lt;/div&gt;

    在页面加载时,通过 tab4 + _hash 获取 div

    【讨论】:

    • 这是一个完美的主意,正是我想要的。谢谢!
    • Hackish 但我在找什么!我没有想到这么明显的事情是愚蠢的。谢谢!
    • 使用 html5,您还可以使用 data-target 或 data-hash 之类的东西来选择元素/div。
    【解决方案2】:

    我会用这个:

    window.scrollTo(0,0);
    

    这样您就不需要更改元素 ID 或其他任何内容。

    我遇到了一个问题,我想向下滚动到选项卡,但由于某种原因它滚动到页面底部(不,没有重复的 id)。我认为这是因为浏览器会在内容加载完成之前滚动到 id,并且额外的内容将元素推到了新滚动位置的上方)。我用这个修复了它:

    if(document.location.hash)
    {
        window.location = document.location.hash;
    }
    

    这里的“if”语句是强制性的,否则你可能会陷入无限循环

    【讨论】:

      【解决方案3】:

      加载完正确的选项卡后,运行以下命令:

      window.location = '#';
      

      【讨论】:

      • 没试过,但是...不会向下滚动然后再向上滚动吗?
      • 经过测试,在 webkit 浏览器上运行良好,但在 FF 上失败。 IE上没试过。会让你知道我发现了什么。
      【解决方案4】:
      1. 默认情况下,您应该只隐藏 id=hash 的元素
      2. 然后,在页面加载后,您使元素可见。

      您可以在这里找到更多信息:How to disable anchor "jump" when loading a page?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-09
        • 2013-04-16
        • 2019-08-23
        • 2011-09-09
        • 1970-01-01
        • 2011-12-15
        • 1970-01-01
        相关资源
        最近更新 更多