禁用 Chrome 的文本输入 undo/redo (CTRL+Z / CTRL+Y)

Disable Chrome's text input undo/redo (CTRL+Z / CTRL+Y)

我目前正在开发 Web 应用程序,但遇到了问题。 您可能知道或不知道,chrome 有一个功能,当您按 CTRL+[=22 时,它会为 <input>(尤其是文本输入)提供“撤消”功能=]Z 和 CTRL+Y 的“重做”这在普通网站中似乎是一个很好的功能,但目前我我正在制作一个也使用这些键盘快捷键的图像编辑器 (CTRL+Z & CTRL+Y).

在我的应用程序中我也有一个文本输入,所以当我更改文本输入的内容然后点击 CTRL+Z 到撤消我的图像编辑器中的更改,它会撤消文本编辑器中的更改!

这里有一个 Codepen 可以演示效果
(说明在 Codepen 中)

所以总而言之,我想删除 chrome 中的 undo/redo 函数,我该怎么做?

var ctrlDown = false;
var ctrlKey = 17, vKey = 86, cKey = 67, zKey = 90;

document.body.onkeydown = function(e) {
  if (e.keyCode == 17 || e.keyCode == 91) {
    ctrlDown = true;
  }
  if ((ctrlDown && e.keyCode == zKey) || (ctrlDown && e.keyCode == vKey) || (ctrlDown && e.keyCode == cKey)) {
    e.preventDefault();
    return false;
  }
}
document.body.onkeyup = function(e) {
  if (e.keyCode == 17 || e.keyCode == 91) {
    ctrlDown = false;
  };
};
<body>
    <input type='text' value='test' />
</body>

这个有用吗?

作为 @KadeHafen 的评论从 here, found on here 中窃取。

您可以使用 onkeydown 事件,并防止默认..例如

document.onkeydown = function(e) {
  if (e.ctrlKey && e.key === 'z') {
    e.preventDefault();
    alert("CTRL + Z!");
  }
}