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

时间:2018-01-01 01:01:49

标签: javascript jquery html html5 browser

有时在我的网络应用中,如果点击应该打开新窗口或标签,我想要取消点击事件监听器。例如,我的单页应用程序具有指向其他内容的链接。他们工作得很好,但有一个问题。如果用户点击此类链接,进行特殊点击以打开新的标签/窗口(让我们说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中的标签/窗口打开请求?我发现这个功能非常重要。至少重要的是要照顾。

1 个答案:

答案 0 :(得分:0)

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