JavaScript+vue:自定义指令禁止表单输入非整数
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键删除。只能用鼠标选中,再改数字。