e.preventDefault()和return false不会阻止链接被触发

时间:2016-04-12 13:25:26

标签: javascript

我在这里看到了几个答案,解释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小提琴与事件变量一致,问题仍然存在。

1 个答案:

答案 0 :(得分:2)

您没有捕获事件对象,这是事件处理函数的第一个参数。

'click', function () {

所以e未定义:

e.preventDefault();

当你尝试将其作为一个函数调用时,它会抛出一个异常(因为它不是一个异常)。

所以它永远不会到达这条线:

return false;

您需要命名参数:

'click', function (e) {