【问题标题】:How to prevent redirect after hyperlink click?如何防止超链接点击后重定向?
【发布时间】:2014-12-15 22:41:37
【问题描述】:

我有以下 html+ js 代码:

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<body>

<a href="#" id=key onclick="func(0)">foo</a>

</body>

<script type="text/javascript">
function func(k){
    alert(1);
    return false;
}   
</script>
</html>

您能解释一下如何重构以下代码,在单击 href 代码 func 后执行但 # 未添加到 URL 并且不应重新加载页面?

【问题讨论】:

标签: javascript html hyperlink onclick href


【解决方案1】:

使用javascript:void(0); 代替#,如下所示:

<a href="javascript:void(0);" id=key onclick="func(0)">foo</a>

【讨论】:

    【解决方案2】:

    您可以简单地删除 href 属性:

    <a id='key' onclick="func(0)">foo</a>
    

    【讨论】:

    • 那是有效的 HTML 吗?我认为a 标签必须有href 属性。
    • 在另一张纸条上,我认为这个会在锚标签上使用cursor:text...我知道它可以在之后用css设置,只是说...
    • 似乎在 HTML4 strict 和 HTML5 中验证良好。 @webeno 好点 - 您可以使用 cursor: pointer 使 a 标签再次使用指针光标。
    【解决方案3】:

    改成:

                                vvvvvvv
    <a href="#" id=key onclick="return func(0)">foo</a>
    

    【讨论】:

    • 我个人最喜欢这个 ;) 你知道为什么这个会阻止# 出现在地址行吗?
    • @webeno 当您在点击处理程序中返回 false 时,它​​会阻止默认操作发生,在超链接的情况下:转到 url(在这种情况下为 #
    • 很好奇为什么 return function 实际上意味着默认返回 false 然后运行该函数,这是我不知道它是如何工作的简写...
    • 因为func(0) 返回false 所以onlick="func(0)"onclick="false" 相同,onclick="return func(0)"onclick="return false" 相同
    • @webeno 这样想:fn = function() { 1 }; alert(fn()) vs fn = function() { return 1 }; alert(fn())
    【解决方案4】:

    我想你忘记了“key”中的引号

    &lt;a href="#" id="key" onclick="func(0)"&gt;foo&lt;/a&gt;

    【讨论】:

    【解决方案5】:

    为了在语义上更正确,我将使用带有以下 onclick 的按钮:

    <button id=key onclick="return func(0)">foo</button>
    

    这样就无需修改 e.preventDefault / return false。

    【讨论】:

    • 按钮看起来不像链接
    • 好吧,a 标签不适合以这种方式使用。如果您想花一点额外的时间来设计按钮,这取决于您。这很容易用 CSS 修复,这意味着你的标记是有效的,你不需要制作黑客来让浏览器按照你想要的方式工作。由你决定。
    • 哦,顺便说一句,我不喜欢对我的回答投反对票,因为你懒得遵循网络最佳实践。
    • 如果你能提供这些线路,我会支持你回答
    • 这不是您原始问题的一部分,我的回答以行业最佳实践回答了您的问题。您至少可以做的就是取消反对票。
    【解决方案6】:

    在func里面,你可以这样做:

    func(event){ event.preventDefault(); /* More code here! */ }
    

    preventDefault 将阻止重定向,在该行之后,您可以添加任何您想要的逻辑。

    但是,如果您不想重定向,建议使用button 而不是a

    【讨论】:

      猜你喜欢
      • 2013-03-13
      • 2023-03-09
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多