Jquery与form表单 财务金额输入框

将文本框设置成带有千位分隔符的财务专用数字输入框 - 零..._博客园


var toThousands = function (num) {
    var num = (num || '').toString(), re = /(\d{3}|\d{3}\.\d{0,2})$/, result = '';
    while (re.test(num)) {
        result = RegExp.lastMatch + result;
        if (num !== RegExp.lastMatch) {
            result = ',' + result;
            num = RegExp.leftContext;
        } else {
            num = '';
            break;
        }
    }
    if (num) { result = num + result; }
    return result;
};

var toNormalNum = function (numStr) {
    return numStr.replace(/\,/g, '');
};

/*
 * @param {HTMLInputElement/HTMLTextAreaElement} elem
 * @param {Number} index
 */
var setCursorPosition= function (elem, index) {
    var val = elem.value;
    var len = val.length;

    // 超过文本长度直接返回
    if (len < index) return;
    (function () {
        elem.focus();
        if (elem.setSelectionRange) { // 标准浏览器
            elem.setSelectionRange(index, index)
        } else { // IE9-
            var range = elem.createTextRange()
            range.moveStart("character", -len)
            range.moveEnd("character", -len)
            range.moveStart("character", index)
            range.moveEnd("character", 0)
            range.select()
        }
    })();
};



$.fn.getCursorPosition = function () {
    var el = $(this).get(0);
    var pos = 0;
    if ('selectionStart' in el) {
        pos = el.selectionStart;
    } else if ('selection' in document) {
        el.focus();
        var Sel = document.selection.createRange();
        var SelLength = document.selection.createRange().text.length;
        Sel.moveStart('character', -el.value.length);
        pos = Sel.text.length - SelLength;
    }
    return pos;
};

/*
 * @param {Reg} reg 用来限制输入字符的格式,如位数,长度,取值范围等
 */
$.fn.TextBoxThousandNumInput = function (reg) {
    var obj = $(this);
    var oldvalue = obj.val();
    var cursorPos = "";
    obj.keyup(function () {
        var newvalue = obj.val();
        cursorPos = obj.getCursorPosition();
        if (newvalue == "") return obj;
        newvalue = toNormalNum(newvalue);
        if (!newvalue.match(reg)) {
            obj.val(toThousands(oldvalue));
        } else {
            obj.val(toThousands(newvalue));
        }
        var offset=toThousands(newvalue).length-toThousands(oldvalue).length;
        if ( offset < -1) {
            setCursorPosition(this, cursorPos-1);
        } else if (offset > 0) {
            setCursorPosition(this, cursorPos+offset - 1);
        } else {
            setCursorPosition(this, cursorPos);
        }
        oldvalue =toNormalNum( obj.val());
    });
    return obj;
};

//个人写正则有问题不输入小数点可以输7位数
var reg = /^((0|[1-9]\d{0,3})(?:.\d{0,2})?)$/; $('#preferential').TextBoxThousandNumInput (reg); $('#totalPrice').TextBoxThousandNumInput (reg);

 

posted @ 2018-08-29 18:27  德丽莎·阿波卡利斯  阅读(654)  评论(0编辑  收藏  举报