我在这里看到了几个答案,解释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;
});
}
});
这是一个演示该问题的 jsfiddle。
https://jsfiddle.net/beLn9146/4/
我想要的行为是,当单击链接时,浏览器不会跟随并停留在同一页面上。当看到完整的代码时,原因就更明显了,但问题在上面重复了。
为了排除故障,我添加了控制台日志以确保它命中 e.preventDefault()
和return false
,确实如此。我也单独尝试过这两种方法。我正在使用最新的 Chrome。
如何防止链接触发,为什么我的代码没有给出此行为?
**更新:**更新了代码和JS fiddle以与事件变量保持一致,但问题仍然存在。
最佳答案
您没有捕获事件对象,它是事件处理函数的第一个参数。
'click', function () {
所以e
未定义:
e.preventDefault();
当您尝试将其作为函数调用时,它会抛出异常(因为它不是一个)。
所以它永远不会到达线:
return false;
您需要命名参数:
'click', function (e) {
关于javascript - e.preventDefault() 和 return false 不会阻止链接触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36574719/