我使用下面的代码示例来禁用 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;
}
});
答案 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
对象具有布尔属性event
和ctrlKey
。所以你的代码是:
metaKey
这仍然不是那么强大,因为你只想检查Mac上的metaKey并检查Linux / Windows上的ctrl来处理一些有人可能按下" Meta的边缘情况+ Z" (这在Windows中做了什么?),但它已经接近了。它适用于我的Mac。
警告 - &您可能已经考虑过这一点 - 禁用操作系统级别的键盘快捷键可能非常危险。它以糟糕的方式混淆了用户的期望。如果您在一个大型浏览器应用程序中重写过类似的东西,那么这是完全合理的。小心!