拋磚引玉——上代碼
首先想到在input事件中正則匹配一下,可是,在輸入錯誤格式或非數字的狀況下,會將整個輸入框清空,體驗很很差:
<template>
<input
placeholder="限制小數點後兩位"
type="text"
v-model="count"
@input="scope.row.count=/^\d+\.?\d{0,2}$/.test(count)||count == '' ? count : count=''">
</template>
<script>
data() {
return {
count: 0
}
}
</script>
而後我就加了一個字段,在keyup事件中賦值,而後匹配:
<template>
<input
placeholder="限制小數點後兩位"
type="text" v-model="count"
@keydown="checkKeydown($event, count)"
@input="scope.row.count=/^\d+\.?\d{0,2}$/.test(count)||count == '' ? count : count=checkValue">
</template>
<script>
data() {
return {
count: '',
checkValue: ''
}
},
methods: {
checkKeydown(e, value){
this.checkValue = value;
}
}
</script>
這樣已經能夠實現需求了,不過體驗上仍是有一點怪,在輸入不匹配時光標會閃動,最佳的體驗應該是在keyup中將不匹配的按鍵直接return,不過這樣須要額外判斷一下backspace、delete、——>、<——等,不知各位大佬是怎麼實現的,歡迎評論!!
附:關於input的均可以交流呀