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

标签 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;
        });
    }
});

这是一个演示该问题的 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/

相关文章:

javascript - 如何使用 Chart.js 创建甘特图并填充日期?

javascript - jQuery 获取图像尺寸,应用于 Div

javascript - 如何使用 ng-repeat 和使用 ng-form 创建的动态表单元素验证动态规则?

javascript - 如何在 .scss 文件中导入 .js 文件

javascript - 如何定义带有条件元素的数组?

javascript - 用破折号替换特殊字符

javascript - 从 javascript 实现 html

javascript - 数据访问 JS 函数

javascript - 在从 <body> 标记触发的 AJAX 请求后执行 Chrome 内容脚本

javascript - jQuery 中的函数不返回变量