防止浏览器中的ctrl + z

时间:2015-08-22 00:11:40

标签: javascript jquery preventdefault

我使用下面的代码示例来禁用 ctrl + c ctrl + v 并且它可以正常工作。我在浏览器中使用类似的机制来禁用 ctrl + z (撤消),但它不起作用。

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;
  }
});

1 个答案:

答案 0 :(得分:0)

我可以从测试中看到你的$(" body")。keydown处理程序中的if条件没有被触发。虽然ctrlDown确实设置为var Employee = function() { var EmployeeInfo = {}; var loadUserinfo = function(userid) { return $.ajax({ type: 'GET', data:{userid: userid}, url: '/employees.json', dataType: 'json', async: true, success: function(data) { return data; } }); }; var getData = function (userid) { return loadUserinfo(userid).done(); }; return { getData: getData }; }; ,但出于某种原因,您的一系列条件并未触发。我不认为在全球范围内存储密钥代码和ctrl状态将是一个很好的方法。

而不是单独的处理程序测试ctrl使用,它更容易在" z"内进行测试。 keydown处理程序是否正在使用Ctrl(或Meta,即命令,与Mac兼容)。对于这种情况,true对象具有布尔属性eventctrlKey。所以你的代码是:

metaKey

这仍然不是那么强大,因为你只想检查Mac上的metaKey并检查Linux / Windows上的ctrl来处理一些有人可能按下" Meta的边缘情况+ Z" (这在Windows中做了什么?),但它已经接近了。它适用于我的Mac。

警告 - &您可能已经考虑过这一点 - 禁用操作系统级别的键盘快捷键可能非常危险。它以糟糕的方式混淆了用户的期望。如果您在一个大型浏览器应用程序中重写过类似的东西,那么这是完全合理的。小心!