uni-app 提交完表单,自动重置表单

页面有一个表单和一个提交按钮(没有重置按钮),希望表单提交后自动重置表单。

想了两个办法,记录一下:

  1. 表单里使用 v-model 绑定数据,提交完表单后,把绑定的数据重置
  2. 表单里有个隐藏的重置按钮,提交完表单后,触发重置按钮的点击。

提交后清空 v-model 绑定的数据

这里用到了 v-model 来进行数据双向绑定

<template>
  <view class="content">
    <form ref="form1" @submit="formSubmit">
      <input class="uni-input" name="input1" v-model="input1" placeholder="这是一个输入框" />
      <button form-type="submit">Submit</button>
    </form>
    
  </view>
</template>

<script setup>
  import { ref } from 'vue'
  const form1 = ref(null)
  const input1 = ref('')

  const formSubmit = (e) => {
    console.log('submit', e.detail.value)
    // 假设这个 setTimeout 是一个异步 AJAX 请求
    setTimeout(() => {
      // 提交完成后,重置表单项的数据
      input1.value = ''
    }, 1000)
  }
</script>

提交后点击隐藏的重置按钮

注意:这种方法仅在 H5 生效,微信小程序、App 里仍然不行

这个方案最麻烦的是,如何触发重置按钮的点击。

不过 Vue 3 提供了 模板引用 能力,通过 ref 可以拿到 DOM 对象引用,于是在表单的提交事件处理函数中,可以通过 refObj.value.$el 拿到具体的 DOM 对象,试了一下,还真的可以

在这里插入图片描述
那么 refObj.value.$el.click() 自然能模拟触发重置按钮的点击行为了。

<template>
  <view class="content">
    <form @submit="formSubmit">
      <input class="uni-input" name="input" placeholder="这是一个输入框" />
      <button form-type="submit">Submit</button>
      <button class="reset-button" ref="resetButton" form-type="reset">Reset</button>
    </form>
    
  </view>
</template>

<script setup>
  import {ref} from 'vue'
  const resetButton = ref(null)
  const formSubmit = (e) => {
    // 假设这个 setTimeout 是一个异步 AJAX 请求
    setTimeout(() => {
      // 提交完成后,重置表单项的数据
      resetButton.value.$el.click()
    }, 1000)
  }
</script>

<style>
  .content {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    background-color: azure;
  }

  .uni-input {
    display: flex;
    justify-content: center;
    border: 1rpx solid #888;
    margin: 20rpx;
  }

  .reset-button {
    display: none;
  }
</style>

总结

uni-app 并没有给表单组件提供类似 resetForm 的 API,只能通过这两种方法实现,如果有其他方法,欢迎其一探讨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

希默软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值