我在这里看到了几个答案,解释e.preventDefault()
和return false
可以防止链接被触发,但它对我不起作用。这是我需要复制的代码。
HTML
<div id="content">
<p class="foo">Paragraph</p>
<hr>
<a href="google.com" class="link">Link</a>
</div>
JS
document.addEventListener("DOMContentLoaded", function (event) {
var page_content_links = document.querySelectorAll('#content a');
for (var i = 0; i < page_content_links.length; i++) {
page_content_links[i].addEventListener('click', function (event) {
console.log('here');
event.preventDefault();
return false;
});
}
});
这是一个证明这个问题的小人物。
https://jsfiddle.net/beLn9146/4/
我想要的行为是,当点击链接时,浏览器不会跟随并停留在同一页面上。当看到完整代码时,原因更明显,但问题在上面复制。
要进行问题排查,我添加了一个控制台日志,以确保它正在点击e.preventDefault()
和return false
,而且确实如此。我也单独尝试了这两种方法。我正在使用最新的Chrome。
如何阻止链接触发,为什么我的代码不会出现此行为?
**更新:**更新的代码和JS小提琴与事件变量一致,问题仍然存在。
答案 0 :(得分:2)
您没有捕获事件对象,这是事件处理函数的第一个参数。
'click', function () {
所以e
未定义:
e.preventDefault();
当你尝试将其作为一个函数调用时,它会抛出一个异常(因为它不是一个异常)。
所以它永远不会到达这条线:
return false;
您需要命名参数:
'click', function (e) {