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键删除。只能用鼠标选中,再改数字。

原文地址:https://www.cnblogs.com/dodocie/p/7747087.html