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来避免这个问题。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。