如何防止超链接点击后重定向?
Posted
技术标签:
【中文标题】如何防止超链接点击后重定向?【英文标题】: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 并且不应重新加载页面?
【问题讨论】:
***.com/questions/1265887/… 这可能就是你要找的东西 【参考方案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”中的引号
<a href="#" id="key" onclick="func(0)">foo</a>
【讨论】:
不要认为添加引号会从链接中删除哈希...另一方面,这在 HTML 中是允许的,应该不是问题,在此处阅读更多内容(未引用属性值):mathiasbynens.be/notes/unquoted-attribute-values 直接链接到我在之前评论中引用的网站上引用的部分:html.spec.whatwg.org/multipage/…【参考方案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
【讨论】:
以上是关于如何防止超链接点击后重定向?的主要内容,如果未能解决你的问题,请参考以下文章
当超链接行为由例如虚拟创建时,如何防止打开新选项卡或窗口? HTML 按钮的“点击”事件处理?
R Shiny DataTable如何防止包含超链接的列中的行选择/取消选择