vant组件表单外部的button触发form表单的submit事件问题

vant组件表单外部的button触发form表单的submit事件

有时候根据需求以及布局需要,button按钮需要放在form外部,但是想触发提交事件的同时又想方便地获取表单的值

一、给form表单添加ref属性

<van-form ref="formData" alidate-first @submit="submit">
      <van-field
           readonly
           v-model="name"
           name="name"
           label="姓名"
       />
</van-form>

二、处理外部button

1.给button添加点击事件

<button type="submit"  @click="send">外部提交</button>

2.在点击事件内部处理逻辑

send(){
   this.$refs.formData.submit();
},

这里的formData是form表单上的ref属性值

然后就可以点击button时就会触发表单的submit事件了,以后可以直接在submit事件里面写逻辑

完整代码附上:

<template>
    <div class="result">
         <van-form ref="formData" alidate-first @submit="submit">
             <van-field
                 readonly
                 v-model="name"
                 name="name"
                 label="姓名"
             />
             <van-field
                 readonly
                 v-model="idNumber"
                 name="idNum"
                 label="身份证号码"
             />
             <van-field
                 readonly
                 v-model="phoneNumber"
                 name="phone"
                 label="手机号"
             />
         </van-form>
         <button type="submit"  @click="send">外部提交按钮</button>
    </div>
</template>
<script>
export default {
    data(){
        return{
            
        }
    },
    methods:{
        submit(values){
            //提交事件的逻辑
            console.log(values) //values为表单中van-field的值
        },
        send(){
            this.$refs.formData.submit();
        },
    }
}
</script>
<style>
 
</style>

vant点击表单中普通按钮为什么会触发表单提交

在表单中,除了提交按钮外,可能还有一些其他的功能性按钮,如发送验证码按钮。

在使用这些按钮时,要注意将native-type设置为button,否则会触发表单提交。

<van-button native-type="button">
  发送验证码
</van-button>

这个问题的原因是浏览器中 button 标签 type 属性的默认值为submit,导致触发表单提交。

我们会在下个大版本中将 type 的默认值调整为button来避免这个问题。 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • vant组件中 dialog的确认按钮的回调事件操作
  • vant-ui框架的一个bug(解决切换后onload不触发)
  • vant-ui组件调用Dialog弹窗异步关闭操作
张贴在2