我正试图在javascript中检测一些键组合。我需要检测 Ctrl + 左, Ctrl + 右,右,以及左
到目前为止,我只是想检测何时按 Ctrl 。这就是我所拥有的(JSFiddle link):
var keys = {};
$(document).keydown(function (e) {
keys[e.which] = true;
printKeys();
});
$(document).keyup(function (e) {
delete keys[e.which];
printKeys();
});
function printKeys() {
var html = '';
for (var i in keys) {
html += '<p>i: ' + i + '</p>'
if (!keys.hasOwnProperty(i)) continue;
if ($.inArray(17, keys) > -1)
html += '<p>ctrl was pressed, return val: ' + $.inArray(17, keys) + '</p>'
}
$('#out').html(html);
}
我想我真的不明白JQuery的inArray
应该如何工作,因为当我按任何键时,它只返回-1。 if语句也计算为true,而我只希望它在按下 Ctrl 时执行此操作。我如何解决这个问题,以便我的if语句正确检测 Ctrl 被按下?一旦我正常工作,我就能够完成其余的工作。
编辑:更改了if-statement以评估inArray
返回> -1
答案 0 :(得分:2)
在javascript中,您需要捕获window.event.ctrlKey
的值以检测是否按下了控制键。下面是一个函数示例,用于使用ctrl+v
键盘快捷键阻止从剪贴板粘贴到字段中:
function BlockControlV() {
var keyPressed = window.event.keyCode;
var ctrlPressed = window.event.ctrlKey;
if (ctrlPressed && keyPressed == 86) {
var ClipBoardData = window.clipboardData.getData('Text')
ClipBoardData = trim(ClipBoardData)
if (ClipBoardData != '') {
if (isNaN(ClipBoardData) == true) {
window.event.keyCode = 0;
}
}
else {
window.event.keyCode = 0;
}
}
}
虽然与你想要做的事情并不完全相关,但你应该能够找出你应该朝哪个方向前进。
答案 1 :(得分:1)
确定是否按下 ctrl 的最简单方法是测试event
属性的ctrlKey
对象:
$(document).keypress(function(e){
console.log(e.which, e.ctrlKey);
});
我本来会提供一个更相关的演示,但我不知道该演示的目的是什么。
答案 2 :(得分:1)
首先,键不是数组 - 它是一个对象。因此,您可以简单地编写:
,而不是函数中的2个单独的if块if (keys.hasOwnProperty(i)) {
...
}
其次,jQuery为事件对象添加了一个非常方便的属性:ctrlKey
。
在你的keydown事件处理程序中,在if语句中包含对printKeys
的调用:
if (e.ctrlKey) {
printKeys();
}
最后,要检测ctrl +(任何其他键),只需检查事件上的which
属性是否与您要查找的keyCodes之一相对应
答案 3 :(得分:0)
首先,你在其他情况下缺少大括号{}
。
<强> js Fiddle DEMO 强>
if (i == 17) {
html += '<p>ctrl</p>';
} else {}
运行Demo&amp;当您单击Ctrl
键时,会显示文本“ctrl”。
e.ctrlKey
是检测Ctrl键单击的最简单方法。
要检测Ctrl +左 Demo here
$(document).keydown(function(e){
if(e.keyCode == 37 && e.ctrlKey)
alert("Control + Left Clicked");
});
答案 4 :(得分:0)
您可以使用返回的event
对象轻松检测到它。此对象还包含有关所有control keys
:
ctrlKey
- 是否按了Control
键?shiftKey
- 是否按了Shift
键?altKey
- 是否按下了Alt
键?所有这些属性都是boolean
值(true
,如果按下了按钮,否则为false
)。
以下是JSFiddle中上述属性的演示。