我想用jQuery捕获click事件,并能够判断是否同时按下了一个键,因此我可以根据keypress事件在回调函数中进行分叉。
例如:
$("button").click(function() {
if([KEYPRESSED WHILE CLICKED]) {
// Do something...
} else {
// Do something different...
}
});
这有可能吗?如果可能的话怎么办呢?
答案 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>