解決vue表單為空也能提交的問(wèn)題
vue表單為空也能提交
今天在用Vue寫(xiě)表單驗(yàn)證的時(shí)候,習(xí)慣性把v-model綁定的值設(shè)置為null,然后再測(cè)試的時(shí)候,發(fā)現(xiàn)如果填寫(xiě)了表單后,又刪除輸入的內(nèi)容,竟然能提交上去,百思不得其解。
最后通過(guò)vue devtools這個(gè)工具找到了問(wèn)題所在。
大概是這樣寫(xiě)的
<input v-model="ipt" ?/>
data () {
????return {
????????ipt: null,
????}
}
if(this.ipt !== null) {
?? ?axios.post()...
}研究了老半天,最后通過(guò)vue工具發(fā)現(xiàn)最初設(shè)置ipt的值為null,當(dāng)表單輸入內(nèi)容,又刪除之后,雖然內(nèi)容不見(jiàn)了,但是ipt的值變?yōu)榱?#39;',這樣就不能通過(guò)簡(jiǎn)單的!== nulll來(lái)判斷了。
if(this.ipt !== null && ?this.ipt) {
?? ?axios.post()...
}vue的表單提交方式
每次做項(xiàng)目都會(huì)用,也會(huì)踩一些坑,這里統(tǒng)一整理一下,當(dāng)個(gè)模板用
vue表單收集和提交
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<form :model="form" @submit.prevent="submit">
<div>
<label>用戶名
<input v-model.trim="form.username" type="text" placeholder="請(qǐng)輸入用戶名">
</label>
</div>
<div>
<label>密碼
<input v-model="form.password" type="password" placeholder="請(qǐng)輸入密碼">
</label>
</div>
<div>
<label>頭像<input type="file" @change="handleChange"></label>
</div>
<div>
<label>姓名
<input v-model.trim="form.name" type="text" placeholder="請(qǐng)輸入您的姓名">
</label>
</div>
<div>
<label>性別
<label><input v-model="form.sex" type="radio" name="sex" value="male">男</label>
<label><input v-model="form.sex" type="radio" name="sex" value="female">女</label>
</label>
</div>
<div>
<label>年齡
<input type="number" v-model.number="form.age" placeholder="請(qǐng)輸入年齡">
</label>
</div>
<div>
<label>愛(ài)好
<label>
<input v-model="form.hobby" type="checkbox" value="study">學(xué)習(xí)
</label>
<label>
<input v-model="form.hobby" type="checkbox" value="games">打游戲
</label>
<label>
<input v-model="form.hobby" type="checkbox" value="eat">吃飯
</label>
</label>
</div>
<div>
<label>所屬校區(qū)
<select v-model="form.campus">
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
<option value="shenzhen">深圳</option>
<option value="wuhan">武漢</option>
</select>
</label>
</div>
<div>
<label>其他信息
<textarea v-model.lazy="form.other" style="vertical-align: middle;" cols="30" rows="10"></textarea>
</label>
</div>
<div>
<label>
<input v-model="form.accept" type="checkbox">
閱讀并接受<a rel="external nofollow" >《用戶協(xié)議》</a>
</label>
</div>
<div>
<button>提交</button>
</div>
</form>
</div>
<script src="lib/vue.js"></script>
<script>
Vue.config.productionTip = false
const vm = new Vue({
el: '#app',
data() {
return {
form: {
hobby: []
},
image: {}
}
},
methods: {
submit() {
console.log(this.form);
//在這里進(jìn)行上傳(axios、ajax)
},
handleChange(event) {
let file = event.target.files[0]
this.form.image = file
}
},
})
</script>
</body>
</html>
上述代碼有三點(diǎn)需要說(shuō)明
- 在<form>標(biāo)簽中出現(xiàn)了:model="form",這是為了將form中的各項(xiàng)數(shù)據(jù)動(dòng)態(tài)收集到vue的data中的form對(duì)象中,方便統(tǒng)一管理
- form標(biāo)簽上的@submit.prevent為提交時(shí)阻止表單的默認(rèn)行為(跳轉(zhuǎn))
- v-model.trim是將輸入的數(shù)據(jù)去除前后的空格;v-model.number是轉(zhuǎn)換為Number類(lèi)型;v-model.lazy是失去焦點(diǎn)后再把數(shù)據(jù)渲染到頁(yè)面上


以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue——解決報(bào)錯(cuò) Computed property "****" was assigned to but it ha
這篇文章主要介紹了Vue——解決報(bào)錯(cuò) Computed property "****" was assigned to but it has no setter.的方法,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下2020-12-12
vue如何實(shí)現(xiàn)pc和移動(dòng)端布局詳細(xì)代碼
這篇文章主要給大家介紹了關(guān)于vue如何實(shí)現(xiàn)pc和移動(dòng)端布局的相關(guān)資料, Vue響應(yīng)式布局適配是一種根據(jù)設(shè)備特性自動(dòng)調(diào)整布局的方法,文中通過(guò)代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
使用vue-draggable-plus實(shí)現(xiàn)拖拽排序
最近遇到一個(gè)需求,在 Vue3 的一個(gè) H5 頁(yè)面當(dāng)中點(diǎn)擊拖拽圖標(biāo)上下拖動(dòng) tab 子項(xiàng),然后點(diǎn)擊保存可以保存最新的 tab 項(xiàng)順序,同事說(shuō)可以用 vue-draggable-plus 這個(gè)庫(kù)來(lái)實(shí)現(xiàn)拖拽,所以本文給大家介紹了如何使用vue-draggable-plus實(shí)現(xiàn)拖拽排序,需要的朋友可以參考下2024-01-01
vue-draggable實(shí)現(xiàn)拖拽表單的示例代碼
本文主要介紹了vue-draggable實(shí)現(xiàn)拖拽表單的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
結(jié)合mint-ui移動(dòng)端下拉加載實(shí)踐方法總結(jié)
下面小編就為大家?guī)?lái)一篇結(jié)合mint-ui移動(dòng)端下拉加載實(shí)踐方法總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
vue-cli項(xiàng)目?jī)?yōu)化方法- 縮短首屏加載時(shí)間
這篇文章主要介紹了vue-cli項(xiàng)目?jī)?yōu)化 縮短首屏加載時(shí)間,需要的朋友可以參考下2018-04-04
vue項(xiàng)目如何實(shí)現(xiàn)前端預(yù)覽word與pdf格式文件
最近項(xiàng)目中需要在線預(yù)覽WORD文檔,所以給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目如何實(shí)現(xiàn)前端預(yù)覽word與pdf格式文件的相關(guān)資料,需要的朋友可以參考下2023-03-03
使用vue-cli導(dǎo)入Element UI組件的方法
這篇文章給大家介紹了使用vue-cli導(dǎo)入Element UI組件的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友一起看看吧2018-05-05

