You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js中input绑定keydown事件不触发 如何实现5位数字输入限制

事件未触发的核心原因

Vue中用@(即v-on)绑定原生DOM事件时,不需要带事件名的on前缀。你写的@onkeydown实际是在监听DOM上不存在的自定义事件onkeydown,绑定的方法永远不会被触发。
额外注意:type="number"类型的输入框对非数字输入有内置的取值过滤,仅监听keydown事件无法覆盖右键粘贴、中文输入法联想输入等场景,校验逻辑会存在漏洞。

可直接运行的实现代码

方案1:直接绑定事件处理(响应更快)

模板部分修正事件名,同时补充input事件覆盖所有输入场景:

<input 
  type="number" 
  min="0" 
  @keydown="limitText" 
  @input="limitText"
>

对应方法逻辑,加入字符过滤和长度截断:

limitText(e: KeyboardEvent | InputEvent) {
  const input = e.target as HTMLInputElement
  // 过滤所有非数字字符
  let formatVal = input.value.replace(/\D/g, '')
  // 超过5位时直接截断前5位
  if (formatVal.length > 5) {
    formatVal = formatVal.slice(0, 5)
  }
  // 把处理后的值写回输入框
  input.value = formatVal
}

方案2:配合v-model响应式处理(更贴合Vue开发习惯)

如果输入框值需要和业务状态绑定,直接用响应式监听处理更方便:

<template>
  <input type="number" min="0" v-model="numVal">
</template>

<script setup lang="ts">
import { ref, watch } from 'vue'
const numVal = ref('')
watch(numVal, (newVal) => {
  let formatVal = String(newVal).replace(/\D/g, '')
  if (formatVal.length > 5) formatVal = formatVal.slice(0, 5)
  numVal.value = formatVal
})
</script>

内容的提问来源于stack exchange,提问作者Jesus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 07:12:24