【问题标题】:Page jump on span.click()span.click() 上的页面跳转
【发布时间】:2012-02-10 18:03:47
【问题描述】:

我发生了一件奇怪的事情: 在导航中单击跨度时,必须切换内容。 一切正常,除了当您单击跨度时页面跳转到它(然后跨度将位于顶部)。我发现关于页面跳转的所有内容都是关于锚标签并返回 false;但没有关于跨度。 在我看来,切换内容不能怪,因为从来没有只有一个 div 有 display: none (如果是这种情况,页面应该跳到顶部而不是跳到跨度,对吗?) 阻止任何操作似乎对跨度不起作用。

$("#subnavi span").click(function(){
    $("#inner-content div:visible").animate({height: "toggle", opacity: "toggle"}, "slow");
    $("#content-"+this.id).animate({height: "toggle", opacity: "toggle"}, "slow");
    $("#subnavi span").attr("class", "");
    $(this).attr("class", "active");
});

如果解释令人困惑,请转到此处:http://gaming-siblings.com/v2.0/#news 并单击左侧导航中的统计信息。由于 div 的高度,页面将跳转到您刚刚单击的跨度并向后滚动一点。为什么会跳转到 span?

这可能并不奇怪,但很合理。我只是不明白:-)

我已经尝试了 2 天,暂时休息一下,因为这很有帮助,但这次没有。

有什么想法/解决方案吗?如前所述,返回 false;或 preventDefault() 在我尝试时不起作用(因为我猜它是跨度)。

【问题讨论】:

    标签: jquery click html page-jump


    【解决方案1】:

    我在您的 click() 函数中发现了这条额外的行:

    document.location.hash = "#" + this.id;
    

    这是“跳转”的原因——您将哈希添加到页面的 URL,因此页面将自动滚动到该锚点(在这种情况下,它将滚动到您点击后的元素'正在附加其id)。

    据我所知,没有真正的解决方法不会完全重新加载页面。最好的选择是只使用单独的页面或根本不使用哈希。

    【讨论】:

    • 嘿,我以为我在注意到跳转后添加了哈希更改。从未想过更改哈希实际上会像哈希锚一样工作。感谢您指出了这一点。那么这完全有道理。我通过使用不存在的哈希 ID 创建了一个解决方法,因此它无法跳转。我想它有点脏,但它可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 2012-05-13
    • 1970-01-01
    相关资源
    最近更新 更多