Lin*_*ina 5 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;
}
});
Run Code Online (Sandbox Code Playgroud)
通过测试我可以看到 $("body").keydown 处理程序中的 if 条件没有触发。虽然 ctrlDown 确实设置为true,但由于某种原因,您的一系列条件没有触发。我不认为在全局范围内存储关键代码和 ctrl 状态将是一个很好的方法。
与使用单独的处理程序测试 ctrl 使用情况相比,在“z” keydown 处理程序中测试是否使用 Ctrl(或 Meta ie 命令,也与 Mac 兼容)会更容易。该event对象具有布尔属性ctrlKey,并且metaKey正是针对这种情况。所以你的代码将是:
$("body").keydown(function(e){\n var zKey = 90;\n if ((e.ctrlKey || e.metaKey) && e.key == 'z') {\n e.preventDefault();\n return false;\n }\n});\nRun Code Online (Sandbox Code Playgroud)\n这仍然不够强大,因为您只想检查 Mac 上的 metaKey 并检查 Linux/Windows 上的 ctrl 来处理一些有人可能按“Meta + Z”的边缘情况(这会做任何事情吗?在 Windows 中?),但已经很接近了。它可以在我的 Mac 上运行。
\n警告\xe2\x80\x94&您可能已经考虑过\xe2\x80\x94禁用操作系统级键盘快捷键可能非常危险。它严重扰乱了用户的期望。如果您要在大型浏览器应用程序中覆盖执行类似的操作,那么这是非常有意义的。当心!
\n| 归档时间: |
|
| 查看次数: |
5431 次 |
| 最近记录: |