input type="text" 沒改成number,造成正則驗證在英文輸入法下失效...
嗯,再次被自己蠢哭。
html:
<!--<input type="number" min="0" max="10">--> <button style="padding:1px 4px" @click="amountChange(item, -1)">-</button> <input id="index" type="number" v-model="item.counter" v-number-only min="1" max="10"> <!--<input type="text" v-model="item.counter" @input="formatCounter">--> <button style="padding:1px 4px" @click="amountChange(item, 1)">+</button>
directives: { numberOnly: { bind: function(el) { el.handler = function() { var formatVal = /^\+?[1-9][0-9]*$/; var val = el.value; if(!formatVal.test(val)){ var reg = new RegExp(val,'g'); el.value = val.replace(reg, 1); } } el.addEventListener('input', el.handler) }, unbind: function(el) { el.removeEventListener('input', el.handler) } } },
以上其實還有一個問題,待補充。。。忙死本寶寶了
如果直接用JavaScript寫,可能對用戶體驗來說,不夠友好。
不用 vue 指令的版本如下:
<input type="number" value="" id="1" onkeyup="initNum(this.id)"> <script> function initNum(id) { var val = document.getElementById(id).value; var formatVal = /^\+?[1-9][0-9]*$/; if(!formatVal.test(val)){ var reg = new RegExp(val,'g'); document.getElementById(id).value = val.replace(reg, '1'); } } </script>
用戶如果輸錯,輸入了字母,那么,無法用backspace鍵刪除。只能用鼠標選中,再改數字。
