Vue 中@keydown.ctrl 正常触发但@keyup.ctrl 修饰符失效的原因是什么
自定义Vue上下文菜单开发需求
- 开发带自定义上下文菜单的VueJS应用,需实现的核心交互逻辑:
- 鼠标悬停在页面指定元素上时,弹出动态上下文菜单,菜单内容随当前悬停元素的不同动态切换
- 用户按住Ctrl键时,已弹出的菜单将切换为静态状态,支持用户与菜单项进行正常交互
开发过程中的异常问题
- 键盘事件绑定存在触发异常:
@keydown.ctrl绑定的按下Ctrl键逻辑可正常按预期触发,但对应的@keyup.ctrl绑定的松开Ctrl键逻辑完全无响应- 尝试添加
.exact、.capture等事件修饰符,均无法解决keyup事件无响应的问题 - 测试发现,将
@keyup.ctrl替换为@keyup.control后,松开Ctrl键的对应逻辑可以正常触发;但反过来,在keydown事件上使用@keydown.control无法生效,始终无法理清keydown与keyup两个事件的差异,为什么二者需要适配不同的按键修饰符
问题场景对应的根元素代码示例
<div tabindex="0" @keydown.esc.exact="() => (displayContext = false)" @keydown.ctrl.exact="() => (keepContext = true)" @keyup.control="() => (keepContext = false)" > <!-- 页面实际业务内容 --> </div>
内容的提问来源于stack exchange,提问作者SnazzyPencil
相关产品推荐
相关产品推荐

