jQuery:检测cmd +单击/控制+单击

我在选项卡中有我的Web应用程序的选项。

 

当用户点击任何选项卡(在同一窗口中)时,我会使用此代码获得淡出效果,然后自动重定向:

 $('ul#tabs li a').click(function(e){ if(e.which == 1) { var link = $(this).attr('href'); $('#content').fadeOut('fast',function(){ window.location = link; }); } }); 

它工作得很好,因为它忽略了鼠标中键单击(在新选项卡中打开选项时,不应触发效果)。 问题是,如果我用键盘+鼠标组合打开选项卡,而不是打开新选项卡,它会触发整个效果/重定向代码。

那么,我怎么能用jQuery检测到这个:

  • cmd +鼠标左键单击(mac)
  • 控制+鼠标左键单击(windows / linux)

在你的点击function中,e.metaKey评估为真吗? 如果是的话,那就是你。

不幸的是,当点击时按住ctrl键时, event.metaKey在Windows上的评估结果为true。

幸运的是, event.ctrlKey在这些情况下的评估结果为true。 此外,您可能需要考虑事件处理程序中的shift + clicks。

因此,您的跨平台jquery风味的JavaScript代码看起来像:

 $('ul#tabs li a').on('click', function(e) { var link = $(this).attr('href'); // Check "open in new window/tab" key modifiers if (e.shiftKey || e.ctrlKey || e.metaKey) { window.open(link, '_blank'); } else { $('#content').fadeOut('fast',function(){ window.location = link; }); } } }); 

使用e.metaKey在Windows上的工作方式不同,因此要检测Windows,您可以使用导航器对象查看用户是否单击了ctrl键(打开新选项卡的默认方式)。

 $('ul#tabs li a').click(function(a){ var href = $(this).attr('href'); // check if user clicked with command key (for mac) or ctrl key (for windows) if(a.metaKey || (navigator.platform.toUpperCase().indexOf('WIN')!==-1 && a.ctrlKey)) { window.open(href,'_blank'); } else { $('#content').fadeOut('fast', function(){ window.location = href; }); } }); 

我知道你想使用jQuery,但我会尝试使用Keymaster:

https://github.com/madrobby/keymaster

这真的很棒,我正在将它用于我正在进行的项目,这很棒。

根据MDN,event.metaKey对Mac键盘上的命令键返回true ,对Windows键盘上的windows键返回true

在此处输入图像描述

因此,您还应检查ctrlKey属性以检测控制键。

 if (event.ctrlKey || event.metaKey) { //ctrlKey to detect ctrl + click //metaKey to detect command + click on MacOS yourCommandKeyFunction(); } else { yourNormalFunction(); }