在这里推测,但稍后会从 Mac 上确认。这已被确认可以在 Mac 上运行。
Win ctrl+click 或 Mac command+click 被“正常”点击监听器拾取,就像使用任何其他修饰键(alt+click、shift+click 等)的点击一样。
这尤其令人困惑,因为在 Mac 上按 ctrl+click会被解释为在 OS 级别上的右键单击。另一方面,Command-click不被解释为中键单击,而是浏览器首选项。
假设您没有专门依赖于修改点击的站点内功能,那么从点击侦听器中排除此类事件是合适的,而是允许它们冒泡以由浏览器本地处理。鉴于有人在类似情况下的经验,您应该能够将以下内容添加到单击处理程序(可能是 Billiand 指出的库级别的委托):
if (e.metaKey || e.ctrlKey) return;
当在处理程序的开头添加e
引用当前点击事件时,这应该绕过任何以下e.preventDefault();
更新:
它确实有效!在这个相当简约的小提琴中,我能够识别何时单击命令或单击控件,以避免执行其余的单击处理程序,其中包括 ajax 获取内容和e.preventDefault();
. 这允许在 Mac 上“按预期”处理命令单击,即在新选项卡中打开链接。
考虑到这一发现,这些行现在应该阅读
if (e.isDefaultPrevented() || e.metaKey || e.ctrlKey) {
return;
}