jQuery:检测cmd+单击/control+单击

标签 jquery keyboard click mouse detection

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

<ul id="tabs">
    <li><a href="a.php">aaa</a></li>
    <li><a href="b.php">bbb</a></li>
    <li><a href="c.php">ccc</a></li>
    <li><a href="d.php">ddd</a></li>
    <li><a href="e.php">eee</a></li>
</ul>

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

$('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)
  • Ctrl + 鼠标左键单击 (Windows/Linux)

最佳答案

遗憾的是,当按住 ctrl 键并单击时,event.metaKey 在 Windows 上的计算结果不会为 true。

幸运的是,在这些情况下,event.ctrlKey 的计算结果确实为 true。另外,您可能需要考虑在事件处理程序中使用 Shift + 单击。

因此,您的跨平台 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;
      });
    }
  }
});

关于jQuery:检测cmd+单击/control+单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7251846/

相关文章:

jquery - allow-control-allow-origin : * present in response, 但它仍然显示错误

jquery - 按下按钮时隐藏或删除重复元素的单个实例

keyboard - 如何使小部件粘在键盘顶部

javascript - click() 在 rails 3.2.1 中不起作用 - 自动点击

jquery - 如何在jquery中缓慢改变背景属性?

javascript - 将 FormParams 与 Jersey 和 jQuery 结合使用

java - 仅当用户确认选择时才在 JComboBox 上处理 actionPerformed

ios - 有没有办法在 UIKeyboardType.NumberPad 的左下角区域添加一个字母?

Android,设置按钮的背景颜色会失去涟漪效果

javascript - 单击时没有任何反应 - jQuery