输入框的keydown事件在回车键按下时没反应怎么办?
我给输入框绑定了keydown事件,想用回车触发提交,但按回车完全没反应。其他键比如字母键能正常触发,控制台也没报错。试过把事件改到父元素上还是不行,这是为什么啊?
<input type="text" @keydown="handleKey" />
对应的JS代码是这样的:
methods: {
handleKey(e) {
if (e.key === 'Enter') {
console.log('回车被按下了')
}
}
}
用原生JS测试也是一样,输入框聚焦状态下按回车就是不执行,其他按键都能看到日志…
你用的是 Vue 的话,可以在事件处理里加
e.preventDefault()看看有没有日志输出:如果加了
preventDefault后能看到日志,说明问题就是被浏览器默认拦截了。这时候你可以继续在里面调用你的提交逻辑。另外,也可以试试用
@keyup.enter这个 Vue 的修饰符,更简洁:如果是原生 JS,记得加
addEventListener的时候不要遗漏preventDefault:这种情况一般不是事件没绑定成功,而是被浏览器默认行为“吞掉了”。加个
preventDefault打印个日志就能确认问题。e.preventDefault(),或者用keyup代替keydown。实在不行换个事件绑定方式,比如用
@keyup.enter直接绑定到方法上,简单粗暴。用下面这行代码搞定: