【问题标题】:Open link in new tab with cmd-key?使用 cmd 键在新选项卡中打开链接?
【发布时间】:2017-09-03 10:58:18
【问题描述】:

我正在使用它来单击一个元素以打开一个链接。当我按住 cmd 键(以及其他操作系统中反映的任何内容)时,有没有办法让它打开一个新选项卡?

$(document).on('click', '.row', function(e) {
    e.preventDefault();
    window.location = '?id=' + $(this).data('id');
});

基本上是普通<a> 的工作方式,但通过 JS。

【问题讨论】:

  • window.open(url) 用于新窗口。

标签: javascript jquery macos keyboard


【解决方案1】:

试试这个:

$(document).on('click', '.row', function(e) {
  e.preventDefault();
  if (cmd) window.open('?id=' + $(this).data('id'), "_blank");
  else window.location = '?id=' + $(this).data('id');
});
var cmd = false;
$(document).keydown(function(e) {
  var key = e.which || e.keyCode;
  if (key == 91 || key == 93 || key == 17 || key == 224) cmd = true;
});
$(document).keyup(function(e) {
  cmd = false;
});
.row { border: 1px #000 solid }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row">Click Me</div>

【讨论】:

  • 太棒了!似乎不适用于 Mac 上的 Firefox,但 Safari 和 Chrome。对我来说已经足够了!
  • 测试它是否现在可以在 Firefox 上运行,但也可以在其他浏览器上运行,因为它可能已经改变了状态。它只是添加了 key = e.which || e.keyCode 因为我认为它在 Firefox 上不起作用,只是 keyCode。如果它不起作用,我可以将其更改回来,以便其他人查看它。
  • 不幸的是同样的事情。仍然适用于 Safari 和 Chrome。谢谢!
  • 有时窗口会在新窗口中打开而无需单击 cmd。当我在做一些其他事情后返回 Chrome 时,经常会发生这种情况。如果我刷新页面它消失了,这是一个错误还是可以在代码中修复的东西?谢谢!
  • SeaBass,我不相信它可以在代码中修复。这可能只是浏览器问题或设置。
【解决方案2】:

当然,除了点击处理程序之外,您只需要跟踪目标键是否被按下:

document.querySelector('#test').addEventListener('click', function(e) {
  if(cmdPressed) {
      console.log('new tab');
      // window.open('');
  } else {
      console.log('redirect');
      // location.href = '';
  }
})

// keeps track of whether user is pressing cmd key
var cmdPressed = false;

document.body.addEventListener('keydown', function(e) {
    cmdPressed = e.which === 91;
});

document.body.addEventListener('keyup', function(e) {
    cmdPressed = false;
});
<div id="test">
Click or CMD+Click me
</div>

或使用 jQuery:

$(document).on('click', '#test', function(e) {
   e.preventDefault();
   if(cmdPressed) {
      console.log('new tab');
      // window.open('');
   } else {
      console.log('redirect');
      // location.href = '';
   }
});

// keeps track of whether user is pressing cmd key
var cmdPressed = false;

$(document).on('keydown', function(e) {
    cmdPressed = e.which === 91;
});

$(document).on('keyup', function(e) {
    cmdPressed = false;
});

【讨论】:

    猜你喜欢
    • 2018-10-20
    • 2015-09-17
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2012-08-21
    • 2017-01-19
    相关资源
    最近更新 更多