通过 addEventListener 添加点击事件以确认从超链接进行导航

发布于 2024-11-08 07:39:48 字数 581 浏览 0 评论 0 原文

我正在编写一些 JavaScript,我本质上想做的是在用户单击链接时确认他们确实想要单击它。

我的代码当前如下所示:

var Anchors = document.getElementsByTagName("a");

for (var i = 0; i < Anchors.length ; i++)
{
    Anchors[i].addEventListener("click", function () { return confirm('Are you sure?'); }, false);
}

此代码显示了我期望看到的确认框,但随后无论按下确认框中的按钮如何都会导航到链接。

我相信这个问题与我使用 addEventListener (或其实现的限制)有关,因为如果我在 HTML 文件中手动添加以下内容,则行为正是我所期望的:

<a href="http://www.google.com" onclick="return confirm('Are you sure?')">Google</a><br />

I am writing some JavaScript that what I essentially want to do is confirm when a user clicks a link that they do actually want to click it.

My code currently looks like this:

var Anchors = document.getElementsByTagName("a");

for (var i = 0; i < Anchors.length ; i++)
{
    Anchors[i].addEventListener("click", function () { return confirm('Are you sure?'); }, false);
}

This code displays the confirm box as I would expect to see it, but then navigates to the link regardless of the button pressed in the confirm box.

I believe the problem is related to my usage of the addEventListener (or a limitation of the implementation of it) because if I add manually write the following in a HTML file, the behaviour is exactly what I would expect:

<a href="http://www.google.com" onclick="return confirm('Are you sure?')">Google</a><br />

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

自此以后,行同陌路 2024-11-15 07:39:48

我更改了您的 onclick 函数以包含对 event.preventDefault() 的调用,并且它似乎可以正常工作:(

var Anchors = document.getElementsByTagName("a");

for (var i = 0; i < Anchors.length ; i++) {
    Anchors[i].addEventListener("click", 
        function (event) {
            event.preventDefault();
            if (confirm('Are you sure?')) {
                window.location = this.href;
            }
        }, 
        false);
}

请参阅 http://jsfiddle.net/ianoxley/vUP3G/1/)

I changed your onclick function to include a call to event.preventDefault() and it seemed to get it working:

var Anchors = document.getElementsByTagName("a");

for (var i = 0; i < Anchors.length ; i++) {
    Anchors[i].addEventListener("click", 
        function (event) {
            event.preventDefault();
            if (confirm('Are you sure?')) {
                window.location = this.href;
            }
        }, 
        false);
}

(See http://jsfiddle.net/ianoxley/vUP3G/1/)

帅的被狗咬 2024-11-15 07:39:48

您必须阻止默认事件处理程序的执行。

请参阅 如何使用 Javascript 的 addEventListener()覆盖 HTML 表单的默认 Submit() 行为

--编辑--

我们,我在编辑答案时看到您已经回答了自己

You have to prevent the execution of the default event handler.

See How to use Javascript's addEventListener() to override an HTML Form's default submit() behavior

--EDIT--

We'll, I've seen you've answered yourself while I was editing the answer

一袭白衣梦中忆 2024-11-15 07:39:48

从原始海报问题中提取的解决方案

经过更多搜索,我在 Stack Overflow 上找到了答案:从点击处理程序返回 false 在 Firefox 中不起作用

如果有人发现这个问题而不是另一个问题,基本上是在使用addEventListener 方法连接事件,不能只使用 return false;要取消该操作,您必须使用事件的 preventDefault() 方法,因此我上面的代码现在变为:

Anchors[i].addEventListener("click", function (event) { 
    if (!confirm('Are you sure?')) { event.preventDefault(); } 
}, false);

Solution pulled from Original Poster question

After some more searching I have found the answer here on Stack Overflow: Returning false from click handler doesn't work in Firefox

In case anyone finds this question instead of the other, basically when using the addEventListener method of wiring events, you cant just use return false; to cancel the action, you must instead use the preventDefault() method of the event, so my code from above has now become:

Anchors[i].addEventListener("click", function (event) { 
    if (!confirm('Are you sure?')) { event.preventDefault(); } 
}, false);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文