React全局快捷键在输入框时无法触发怎么办?
我在React项目里用document监听全局快捷键,但输入框聚焦时按Ctrl+S完全没反应。已经试过用捕获阶段和冒泡阶段,代码是这样的:
useEffect(() => {
const handleKey = (e) => {
if (e.key === 's' && (e.ctrlKey || e.metaKey)) {
console.log('保存操作');
e.preventDefault();
}
};
document.addEventListener('keydown', handleKey, { capture: true });
return () => document.removeEventListener('keydown', handleKey);
}, []);
输入框里按快捷键连控制台都不打日志,但页面其他区域正常。是不是因为输入元素拦截了事件?该怎么让输入状态下也能监听到全局快捷键?
如果想让快捷键在输入框里也生效,那就反过来处理。给输入框加上自定义属性,比如
data-global-shortcut="true",然后这样写:记得按需选择方案,别搞混了。调试这种问题确实挺烦的,但逻辑理清楚就好。