jquery 限制输入框只能输入数字的自定义插件

发布时间:2020-06-11编辑:脚本学堂
本文分享一个jquery插件,实现限制输入框中仅可以输入数字的功能,有需要的朋友,参考下吧。

代码分享:

<script>
/** 
 * 限制输入框只能输入数字(JQuery插件) 
 * 
 * @example $("#amount").numeral() 
 * 
 * @example $("#amount").numeral(4) or $("#amount").numeral({'scale': 4}) 
 * 
 * @example $(".x-amount").numeral() 
 **/  
$.fn.numeral = function() {       
    var args = arguments;  
    var json = typeof(args[0]) == "object";   
    var scale = json ? args[0].scale : args[0];  
    scale = scale || 0;  
    $(this).css("ime-mode", "disabled");  
    var keys = new Array(8, 9, 35, 36, 37, 38, 39, 40, 46);  
    this.bind("keydown",function(e) {  
        e = window.event || e;  
        var code = e.which || e.keyCode;      
        var idx = Array.indexOf(keys, code);  
        if (idx != -1) {  
            return true;  
        }  
        var value = this.value;           
        if (code == 190 || code == 110) {  
            if (scale == 0 || value.indexOf(".") != -1) {  
                return false;  
            }  
            return true;  
  
        } else {  
            if ((code >= 48 && code <= 57) || (code >= 96 && code <= 105))  {                     
                if (scale > 0 && value.indexOf(".") != -1) {                   
                    var reg = new RegExp("^[0-9]+(.[0-9]{0," + (scale - 1) + "})?$");                                        
                    if (!reg.test(value)) {                       
                        return false;  
                    }                             
                }  
                return true;  
            }  
            return false;  
        }  
    });  
    this.bind("blur", function() {  
        if (this.value.lastIndexOf(".") == (this.value.length - 1)) {  
            this.value = this.value.substr(0, this.value.length - 1);  
        } else if (isNaN(this.value)) {  
            this.value = "";  
        } else {  
            var value = this.value;  
            if (scale > 0 && value.indexOf(".") != -1) {                   
                var reg = new RegExp("^[0-9]+(.[0-9]{0," + scale + "})?$");                              
                if (!reg.test(value)) {                   
                    this.value = format(value, scale);  
                }  
            }  
        }  
    });  
    this.bind("paste", function() {           
        var s = window.clipboardData.getData('text');  
        if (!/D/.test(s));  
        value = s.replace(/^0*/, '');  
        return false;  
    });  
    this.bind("dragenter", function() {  
        return false;  
    });  
    var format = function(value, scale){  
        return Math.round(value * Math.pow(10, scale)) / Math.pow(10, scale);  
    }         
    Array.indexOf = function(array, value) {  
        for (var i = 0; i < array.length; i++) {  
            if (value == array[i]) {  
                return i;  
            }  
        }  
        return -1;  
    }  
};
</script>