如何在使用jQuery的click事件期间检查是否按下了某个键?

时间:2010-03-15 07:25:46

标签: jquery events keyboard click

我想用jQuery捕获click事件,并能够判断是否同时按下了一个键,因此我可以根据keypress事件在回调函数中进行分叉。

例如:

$("button").click(function() {
    if([KEYPRESSED WHILE CLICKED]) {
        // Do something...
    } else {
        // Do something different...
    }
});

这有可能吗?如果可能的话怎么办呢?

4 个答案:

答案 0 :(得分:167)

您可以轻松地从事件属性中检测shift,alt和control键;

$("button").click(function(evt) {
  if (evt.ctrlKey)
    alert('Ctrl down');
  if (evt.altKey)
    alert('Alt down');
  // ...
});

有关更多属性,请参阅quirksmode。如果要检测其他密钥,请参阅cletus's answer

答案 1 :(得分:45)

您需要使用keydown()keyup()单独跟踪关键状态:

var ctrlPressed = false;
$(window).keydown(function(evt) {
  if (evt.which == 17) { // ctrl
    ctrlPressed = true;
  }
}).keyup(function(evt) {
  if (evt.which == 17) { // ctrl
    ctrlPressed = false;
  }
});

请参阅list of key codes。现在你可以查看:

$("button").click(function() {
  if (ctrlPressed) {
    // do something
  } else {
    // do something else
  }
});

答案 2 :(得分:7)

我能够单独使用JavaScript

 <a  href="" onclick="return Show(event)"></a>

  function Show(event) {
            if (event.ctrlKey) { 
                 alert('Ctrl down');
            }
     }

答案 3 :(得分:3)

在不窃取@Arun Prasad's thunder的情况下,这是我重新编写的纯JS代码段,以停止默认操作,否则,如果按CTL +单击,将打开一个新窗口。

function Show(event) 
{
  if (event.ctrlKey) 
  {
    alert('Ctrl held down which clicked');
  } 
  else 
  {
    alert('Ctrl NOT pressed');
  }
  return false
}
<p>Hold down CTL on the link to get a different message</p>

<a href="" onclick="return Show(event)">click me</a>