阻止浏览器中的 ctrl+z

2024-01-12

I used the code sample below to disable ctrl + c and ctrl + v and it works. I used similar mechanics to disable ctrl + z (undo) in the browser but it doesn't work.

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

$('body').keydown(function(e) {
  if (e.keyCode == 17 || e.keyCode == 91) {
    ctrlDown = true;
  };
}).keyup(function(e) {
  if (e.keyCode == 17 || e.keyCode == 91) {
    ctrlDown = false;
  };
});

$("body").keydown(function(e){
  if ((ctrlDown && e.keyCode == zKey) || (ctrlDown && e.keyCode == vKey) || (ctrlDown && e.keyCode == cKey)) {
    e.preventDefault();
    return false;
  }
});

通过测试我可以看到 $("body").keydown 处理程序中的 if 条件没有触发。虽然 ctrlDown 确实被设置为true,由于某种原因,你的一系列条件没有触发。我不认为在全局范围内存储关键代码和 ctrl 状态将是一个很好的方法。

与使用单独的处理程序测试 ctrl 使用情况相比,在“z”按键处理程序中测试是否使用 Ctrl(或 Meta,即命令,也与 Mac 兼容)会更容易。这event对象具有布尔属性ctrlKey and metaKey就为了这样的场合。所以你的代码将是:

$("body").keydown(function(e){
  var zKey = 90;
  if ((e.ctrlKey || e.metaKey) && e.key == 'z') {
    e.preventDefault();
    return false;
  }
});

这仍然不够强大,因为你只想检查 Mac 上的 metaKey 并检查 Linux/Windows 上的 ctrl 来处理一些有人可能按“Meta + Z”的边缘情况(这有什么作用吗?在 Windows 中?),但已经很接近了。它可以在我的 Mac 上运行。


请注意——您可能已经考虑过这一点——禁用操作系统级键盘快捷键可能非常危险。它严重扰乱了用户的期望。如果您要在大型浏览器应用程序中覆盖执行类似的操作,那么这是非常有意义的。当心!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

阻止浏览器中的 ctrl+z 的相关文章

随机推荐