吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 837|回复: 7
收起左侧

[学习记录] 在Vue中使用键盘事件,回调函数被执行两次

[复制链接]
SmallCode 发表于 2023-4-11 09:10
暂时先不考虑v-for的key,查看下面的代码
[JavaScript] 纯文本查看 复制代码
<template>
  <div>
    <form @submit.prevent="addTask">
    <span>请输入待办事项:</span>
    <input type="text" placeholder="请输入..." v-model="text" @keyup.enter="addTask">
    <button class="btn">确定</button>
    </form>
    <ol>
      <li v-for="(item,index) in arr" :key="index">{{item}} <a href="JavaScript:;" @click="del(index)">删除</a> </li>
    </ol>
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  data() {
    return {
      arr:[],
      text:''
    };
  },
  methods: {
    addTask(){
      this.arr.push(this.text);
      this.text = '';
      console.log(1);
    },
    del(index){
      this.arr.splice(index,1);
    }
  },
};
</script>

<style scoped>
.btn{
  margin: 0 10px 0 10px;
  vertical-align:middle
}
</style>

结果就是,当在input框输入完内容后按下回车,回调函数会被执行两次
但是使用点击事件,点击确定按钮,回调函数只会执行一次
问题就在于标红的form表单的submit事件点击回车键会触发form表单提交,(自己的理解)解决方案:就是不给input添加键盘事件,form表单自带键盘事件(网上查的),哈哈哈服了



image.png
image.png
image.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lucklys 发表于 2023-4-11 09:39
本帖最后由 lucklys 于 2023-4-11 11:02 编辑

不明白为什么要写这玩意  <form @submit.prevent="addTask">
直接把form去掉 这东西没啥用
小俊520 发表于 2023-4-11 10:39
额。。。不用element框架吗?不如ui框架简单省事
三岁就会写BUG 发表于 2023-4-11 11:06
本帖最后由 三岁就会写BUG 于 2023-4-11 11:07 编辑

给form标签加个 @submit.native.prevent 就行了,表单就不会触发回车事件了
[JavaScript] 纯文本查看 复制代码
<form @submit.native.prevent>xxx</form>

@submit.native.prevent.native 表示对一个组件绑定系统原生事件.prevent 表示提交以后不刷新页面
 楼主| SmallCode 发表于 2023-4-11 12:48
三岁就会写BUG 发表于 2023-4-11 11:06
给form标签加个 @submit.native.prevent 就行了,表单就不会触发回车事件了[mw_shl_code=javascript,true]x ...

我试了,但是好像会报错,说是.native的问题。具体是什么问题忘记了。
 楼主| SmallCode 发表于 2023-4-11 12:50
小俊520 发表于 2023-4-11 10:39
额。。。不用element框架吗?不如ui框架简单省事

看书复习的时候看到了,然后自己想加一个键盘回车,然后发现了这个问题。记录一下
d199212 发表于 2023-4-11 14:15
@keyup.enter.stop应该就可以了吧
 楼主| SmallCode 发表于 2023-4-11 14:21
d199212 发表于 2023-4-11 14:15
@keyup.enter.stop应该就可以了吧

应该是不可的.stop修饰符的作用是阻止事件冒泡,但这个问题不是冒泡的问题。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表