单击#-links 时避免窗口跳到顶部

IT技术 javascript jquery html
2021-02-23 20:28:30

我有一个包含一些问题和答案的页面,默认情况下答案是折叠的。当他们单击问题时,我展开隐藏的答案 div。问题是当我点击这些问题时,窗口会跳到屏幕顶部。这不是一个大问题,但我觉得很烦人,因为我必须再次向下滚动到问题。

链接看起来像这样:

<a href="#" id="myID">Myquestion</a>

我使用 jQuery 和.click作为事件侦听器。

有什么简单的方法可以避免这种情况,还是我必须使用.scroll并找到问题的坐标?我宁愿避免这种情况。

编辑:我知道我可以使用锚点来做到这一点,但我想完全避免屏幕的任何跳跃。

6个回答

您需要添加preventDefault()到您的点击处理程序。这将停止浏览器执行它自己的链接处理程序,并且只会运行您指定的代码。

例子:

$("#myID").click(function(e) {
    e.preventDefault();
    // Do your stuff
});
IE7 在跳过链接上有同样的问题,它不适用于 e.preventDefault();
2021-04-21 20:28:30
preventDefault()如果您使用 jQuery,则应该适用于所有浏览器。您也可以从事件处理程序中返回 false。
2021-04-22 20:28:30
我的研究不好,我在另一个问题中发现了这一点,if(e.preventDefault){ e.preventDefault()} else{e.stop()};谢谢。案件结案。
2021-05-01 20:28:30
好吧,由于某种原因它在旧版本的 IE 中不起作用
2021-05-12 20:28:30
啊,当然。我太愚蠢了。但这在 IE7 中不起作用。我想添加对 IE7 和/或 IE8 的支持。有没有办法做到这一点?
2021-05-15 20:28:30

不要将 A 标签用于与导航无关的任务。它不是语义标记,也不会优雅地降级。改用按钮。

好主意,问题是文本本身应该是链接,因此我没有选择按钮。但我想为此使用跨度或其他东西会更聪明。下次我会记住这一点,不想重写我的整个解析器。
2021-04-19 20:28:30

您可以非常简单地做到:只需!在您的末尾添加href

<a href="#!" id="myID">Myquestion</a>

替代的 jQuery 方式是:

$("#myID").click(function(e) {
    e.preventDefault(); // one way 
    return false; // second way prevent default click action from happening
});
警告:Google Analytics 不喜欢带有#!值的href并且会将此错误抛出到日志中:Syntax error, unrecognized expression: #!
2021-04-29 20:28:30
$("#myID").click(function(e) {
    if(e.preventDefault)
        e.preventDefault();
    else
        e.stop();
});

e.preventDefault()单独在旧版本的 IE 中不起作用。

实际上使用 e.stop() 会工作得很好,所以如果
2021-04-19 20:28:30

实际上,最简单的方法是从锚标记中删除 href 属性。从 HTML5 开始,锚标记不需要包含 href 属性来表示语义。

所以

<a id="myID">Myquestion</a>

代替

<a href="#" id="myID">Myquestion</a>

这适用于 IE8+、Chrome 和 Firefox。请注意, :link css 样式不适用于不包含 href 属性的锚标记。

如果您需要 href 属性和/或 IE7 兼容性,则

$("#myID").click(function(e) {
if(e.preventDefault)
    e.preventDefault();
else
    e.stop();
});

可能是最好的方法。