有时在我的网络应用中,如果点击应该打开新窗口或标签,我想要取消点击事件监听器。例如,我的单页应用程序具有指向其他内容的链接。他们工作得很好,但有一个问题。如果用户点击此类链接,进行特殊点击以打开新的标签/窗口(让我们说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中的标签/窗口打开请求?我发现这个功能非常重要。至少重要的是要照顾。
答案 0 :(得分:0)
不要让它们成为锚点。使它们跨越,并使用跨度的单击事件来设置window.location。这比查找有人想要在新窗口中打开内容的每个边缘情况要容易得多 - 例如,右键单击链接,复制链接位置,打开新选项卡/窗口和粘贴?你永远无法用锚标记阻止它。