如果单击打开新选项卡或窗口,则禁止单击事件侦听器

问题描述 投票:0回答:1

有时在我的网络应用程序上,如果点击应该打开一个新的窗口或标签,我想要取消点击事件监听器。例如,我的单页应用程序具有指向其他内容的链接。他们工作得很好,但有一个问题。如果用户点击此类链接,进行特殊点击以打开新的标签/窗口(让我们说cmd⌘+点击Mac),我不想激活事件监听器。

通常我会这样做:

<a href="/music">Music</a>
<a href="/games">Games</a>
<a href="/about-us">About Us</a>
<a href="/contact">Contact</a>

还有一些jQuery魔术:

$("a[href]").click(event => {
    if (event.metaKey || event.shiftKey) {
        // Let browser handle that normally if cmd or shift is pressed
        return true;
    }

    let uri = $(event.target).attr("href");

    // My viewPage(uri) function displays content by href
    viewPage(uri);

    return false;
});

它按预期工作 - 只要使用鼠标+键盘快捷键打开新选项卡/窗口,当前选项卡不会受影响,并显示新的选项卡/窗口。

这里的问题是,假设cmd⌘+ click或shift + click实际上是快捷方式。对于不同的浏览器和系统,它们可以不同。

所以这是我想问的问题:有没有可靠的方法来检测JavaScript中的选项卡/窗口打开请求?我发现这个功能非常重要。至少重要到足以照顾。

javascript jquery html html5 browser
1个回答
0
投票

不要让它们成为锚。使它们跨越,并使用跨度的单击事件来设置window.location。这比查找有人想要在新窗口中打开内容的每个边缘情况要容易得多 - 例如,右键单击链接,复制链接位置,打开新选项卡/窗口和粘贴?你永远无法用锚标记阻止它。

© www.soinside.com 2019 - 2024. All rights reserved.