在 javascript 中捕获 ctrl + z 组合键

我试图用这段代码捕获 javascript 中 ctrl + z键的组合:

<html>
<head>
<title>Untitled Document</title>
</head>
<body>


<script type='text/javascript'>
function KeyPress(e) {
var evtobj = window.event? event : e




//test1 if (evtobj.ctrlKey) alert("Ctrl");
//test2 if (evtobj.keyCode == 122) alert("z");
//test 1 & 2
if (evtobj.keyCode == 122 && evtobj.ctrlKey) alert("Ctrl+z");
}


document.onkeypress = KeyPress;
</script>


</body>
</html>

如果我按住 ctrl键并按任何其他键,注释行“ test1”将生成警报。

注释行“ test2”在我按 z键时生成警报。

按照“测试1和2”之后的行将它们放在一起,按住 ctrl键然后按下 z键不会产生预期的警报。

密码有什么问题吗?

133053 次浏览
  1. 使用 onkeydown(或 onkeyup) ,而不是 onkeypress
  2. 使用 keyCode90,而不是122
function KeyPress(e) {
var evtobj = window.event? event : e
if (evtobj.keyCode == 90 && evtobj.ctrlKey) alert("Ctrl+z");
}


document.onkeydown = KeyPress;

在线演示: http://jsfiddle.net/29sVC/

To clarify, keycodes are not the same as character codes.

字符代码用于文本(它们根据编码不同而不同,但在很多情况下0-127仍然是 ASCII 代码)。键码映射到键盘上的键。例如,Unicode字符0x22909表示好。实际上没有多少键盘(如果有的话)有这样的键。

操作系统负责使用用户配置的输入方法将击键转换为字符代码。结果被发送到按键事件。(而 keydown 和 keyup 响应用户按下按钮,而不是输入文本。)

Ctrl+t is also possible...just use the keycode as 84 like

if (evtobj.ctrlKey && evtobj.keyCode == 84)
alert("Ctrl+t");

90是 Z的关键,这将做必要的捕获..。

function KeyPress(e){
// Ensure event is not null
e = e || window.event;


if ((e.which == 90 || e.keyCode == 90) && e.ctrlKey) {
// Ctrl + Z
// Do Something
}
}

根据您的需求,您可能希望在 if 语句中添加一个 e.preventDefault();来专门执行您的自定义功能。

$(document).keydown(function(e){
if( e.which === 89 && e.ctrlKey ){
alert('control + y');
}
else if( e.which === 90 && e.ctrlKey ){
alert('control + z');
}
});

演示

我做的这个插件可能会有帮助。

Plugin

你可以使用这个插件,你必须提供的关键代码和功能,这样运行

simulatorControl([17,90], function(){console.log('You have pressed Ctrl+Z');});

在代码中我已经显示了如何执行为 Ctrl + Z。你会得到详细的文件上的链接。插件是在 JavaScript 代码部分的我的笔在 Codepen。

对于 CTRL + Z使用此代码。Keydown 中 Z的 keycode 是90,而 CTRL + Z是 ctrlKey。在控制台区域检查这个密码

 $(document).on("keydown", function(e) {
console.log(e.keyCode, e.ctrlKey);
/*ctrl+z*/
if (e.keyCode === 90 && e.ctrlKey) { // this is confirmed with MacBook pro Monterey on 1, Aug 2022
{
//your code here
}
});

对于那些将来偶然发现这个问题的人,这里有一个更好的方法来完成这项工作:

document.addEventListener('keydown', function(event) {
if (event.ctrlKey && event.key === 'z') {
alert('Undo!');
}
});

使用 event.key大大简化了代码,去除了硬编码的常量。

Additionally, using document.addEventListener means you won’t clobber other listeners to the same event.

最后,没有理由使用 window.event,因为它会导致代码脆弱。

document.onkeydown = function (e) {
var special = e.ctrlKey || e.shiftKey;
var key = e.charCode || e.keyCode;
console.log(key.length);
if (special && key == 38 || special && key == 40 ) {
// enter key do nothing
e.preventDefault();
}
}

这里有一种阻塞两个键的方法,或者 shift + 或者 Ctrl + 组合键。

&& helps with the key combinations, without the combinations, it blocks all ctrl or shift keys.

不推荐使用 KeyboardEvent.keyCode(link) ,可以考虑使用 KeyboardEvent.key(链接)。

所以,解决方案应该是这样的。

if (e.key === "z" && e.ctrlKey) {
alert('ctrl+z');
}

enter image description here

当您使用 keydown 事件时,您实际上可以在 KeyboardEvent 中看到这一切