指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

input框关于keydonw和keyup的使用分析:

@keydown="handleKeyDown($event)"
@keyup="handleKeyUp($event)"

const handleKeyDown = (event: KeyboardEvent) => {
  //这个打印,不会打印出当前输入数据,比如输入1,会打印空,在输入2,会打印1,在输入3,会打印12
  console.log("model.value is:", model.value);
}
const handleKeyUp = (event: KeyboardEvent) => {
//这个打印,会打印出当前输入数据,比如输入1,会打印1,在输入2,会打印12,在输入3,会打印123
  console.log("model.value is:", model.value);
}

这是keyDown和keyUp的一个重要不同,非常感谢实用,keyDown相当于可以保留之前的输入数据,不会立即更新,但是keyUp可以实时更新. 在做input数据验证的时候非常有用:


如下(这个案例只是其中一种场景,假设用户输入的是整数, 用来禁止用户输入超过指定值的数据,比如不能超过100):
const handleKeyDown = (event: KeyboardEvent) => {
  lastInputValue.value = model.value || "";
}


const handleInteger = (event: InputEvent) => {
  const currentValue = (event.target as HTMLInputElement).value || "";
  if (currentValue > props.maxNumber) {
    (event.target as HTMLInputElement).value = lastInputValue.value; //由于lastInputValue.value 保留了props.maxNumber之前的数据,所以这里把之前的数据赋值给model.value,实现了禁止输入大于指定值的数据
    model.value = lastInputValue.value;
    event.preventDefault();
  }
}

  <input
    v-model="model as string | number"
    @keydown="handleKeyDown($event)"
    @input="handleInteger($event)"
  >

总结:
@keydown 事件是在 按键按下 的时候触发的,此时输入框的内容 还没有更新,也就是说,model 的值是 按键按下之前的值。
@keyup 事件是在 按键松开 的时候触发的,此时输入框的内容 已经更新,所以 model 的值会是你当前输入的值。