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鍵刪除。只能用鼠標選中,再改數字。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM