【发布时间】:2015-09-11 18:49:08
【问题描述】:
我正在尝试实现一个简单的(-ish)路由器作为练习。但是,我无法检测锚点击。理想情况下,我想在 URL 更改时拦截事件(不使用哈希),但现在我只想能够拦截任何锚点击事件。
这是我迄今为止尝试过的:
HTML
<nav id="mainMenu">
<ul id="navlinks">
<li>
<a href="/">
<span>HOME</span>
</a>
</li>
<li>
<a href="/posts">
<span>POSTS</span>
</a>
</li>
</ul>
</nav>
单独的 JS 文件
function intercept(event)
{
console.log("triggered");
var tag = event.target;
if (
tag.tagName.toUpperCase() === 'A' &&
tag.href &&
event.button == 0 &&
tag.origin == document.location.origin
){
event.preventDefault();
console.log("default prevented")
}
}
使用此代码,我只检测到 span 事件,而不是 <a> 事件。我可以做些什么来使用 vanilla JS 检测锚点击事件(如果可能的话)?我也希望能够检测动态创建的锚点。
编辑 1: 更改了 JS 函数。控制台打印default prevented: SPAN:
function intercept(event)
{
console.log("triggered");
var tag = event.target;
//if (
// tag.tagName === 'A'
//){
event.preventDefault();
console.log("default prevented: " + tag.tagName);
//}
}
编辑 2: 锚标签并不总是有子标签,并且可能的子标签可能不是 span。
【问题讨论】:
-
注释掉一些条件谓词,直到它按预期工作,然后重新修改条件。
-
要检测导航尝试,您可以在 body 上监听 beforeunload。
-
@dandavis 我所有的条件句现在都消失了。它仍然只检测跨度点击。
-
@dtanders 这样可以阻止页面卸载吗?
-
你是如何绑定处理程序的?
标签: javascript html onclick anchor dom-events