为什么同时按住Ctrl/Cmd和Delete键时检测不到组合键?
我在开发文本编辑器时想用Ctrl/Cmd+Delete实现删除段落的功能,但发现检测不到组合键按下:
document.addEventListener('keydown', (e) => {
if ((e.ctrlKey || e.metaKey) && e.key === 'Delete') {
console.log('组合键触发');
e.preventDefault();
}
});
当同时按住Ctrl(Mac用Cmd)和Delete键时,控制台没有任何输出。单独按Delete或Ctrl键会有正常响应,但组合键完全没反应。尝试过把条件改成e.code === 'Delete'也没用,难道是事件监听顺序的问题吗?
e.key在某些浏览器和系统组合下,Delete键的行为会有点奇怪,特别是在组合键里。可以试试这样改你的代码:
这里加了个
e.key === 'Backspace'的判断,因为有些系统(特别是Mac)在按CMD+Delete时可能会返回Backspace而不是Delete。这是浏览器和操作系统的差异导致的。另外提醒一下,记得测试不同浏览器和操作系统,确保兼容性。要是还有问题,可以再调一下
e.code或者看看有没有其他特殊情况冒出来。e.key在同时按下Ctrl/Cmd和Delete时不会返回'Delete',而是返回'undefined'。改用e.code并检查具体的键码:这样就能正确检测到组合键了。