仅限印度代码的电话屏蔽

时间:2014-01-14 11:55:23

标签: jquery masking

是否可以修复手机屏蔽组件中的代码?这是我使用掩码的Jquery代码。

(function($) {
    var pasteEventName = ($.browser.msie ? 'paste' : 'input') + ".mask";
    var iPhone = (window.orientation != undefined);

    $.mask = {
        //Predefined character definitions
        definitions : {
            '9' : "[0-9]",
            'a' : "[A-Za-z]",
            '*' : "[A-Za-z0-9]"
        },
        dataName : "rawMaskFn"
    };

    $.fn
            .extend({
                //Helper Function for Caret positioning
                caret : function(begin, end) {
                    if (this.length == 0)
                        return;
                    if (typeof begin == 'number') {
                        end = (typeof end == 'number') ? end : begin;
                        return this.each(function() {
                            if (this.setSelectionRange) {
                                this.setSelectionRange(begin, end);
                            } else if (this.createTextRange) {
                                var range = this.createTextRange();
                                range.collapse(true);
                                range.moveEnd('character', end);
                                range.moveStart('character', begin);
                                range.select();
                            }
                        });
                    } else {
                        if (this[0].setSelectionRange) {
                            begin = this[0].selectionStart;
                            end = this[0].selectionEnd;
                        } else if (document.selection
                                && document.selection.createRange) {
                            var range = document.selection.createRange();
                            begin = 0 - range.duplicate().moveStart(
                                    'character', -100000);
                            end = begin + range.text.length;
                        }
                        return {
                            begin : begin,
                            end : end
                        };
                    }
                },
                unmask : function() {
                    return this.trigger("unmask");
                },
                mask : function(mask, settings) {
                    if (!mask && this.length > 0) {
                        var input = $(this[0]);
                        return input.data($.mask.dataName)();
                    }
                    settings = $.extend({
                        placeholder : "_",
                        completed : null,
                        allowIncompleteData : true

                    }, settings);

                    var defs = $.mask.definitions;
                    var tests = [];
                    var partialPosition = mask.length;
                    var firstNonMaskPos = null;
                    var len = mask.length;

                    $.each(mask.split(""), function(i, c) {
                        if (c == '?') {
                            len--;
                            partialPosition = i;
                        } else if (defs[c]) {
                            tests.push(new RegExp(defs[c]));
                            if (firstNonMaskPos == null)
                                firstNonMaskPos = tests.length - 1;
                        } else {
                            tests.push(null);
                        }
                    });

                    return this
                            .trigger("unmask")
                            .each(
                                    function() {
                                        var input = $(this);
                                        var buffer = $
                                                .map(
                                                        mask.split(""),
                                                        function(c, i) {
                                                            if (c != '?')
                                                                return defs[c] ? settings.placeholder
                                                                        : c
                                                        });
                                        var focusText = input.val();

                                        function seekNext(pos) {
                                            while (++pos <= len && !tests[pos])
                                                ;
                                            return pos;
                                        }
                                        ;
                                        function seekPrev(pos) {
                                            while (--pos >= 0 && !tests[pos])
                                                ;
                                            return pos;
                                        }
                                        ;

                                        function shiftL(begin, end) {
                                            if (begin < 0)
                                                return;
                                            for ( var i = begin, j = seekNext(end); i < len; i++) {
                                                if (tests[i]) {
                                                    if (j < len
                                                            && tests[i]
                                                                    .test(buffer[j])) {
                                                        buffer[i] = buffer[j];
                                                        buffer[j] = settings.placeholder;
                                                    } else
                                                        break;
                                                    j = seekNext(j);
                                                }
                                            }
                                            writeBuffer();
                                            input.caret(Math.max(
                                                    firstNonMaskPos, begin));
                                        }
                                        ;

                                        function shiftR(pos) {
                                            for ( var i = pos, c = settings.placeholder; i < len; i++) {
                                                if (tests[i]) {
                                                    var j = seekNext(i);
                                                    var t = buffer[i];
                                                    buffer[i] = c;
                                                    if (j < len
                                                            && tests[j].test(t))
                                                        c = t;
                                                    else
                                                        break;
                                                }
                                            }
                                        }
                                        ;

                                        function keydownEvent(e) {
                                            var k = e.which;

                                            //backspace, delete, and escape get special treatment
                                            if (k == 8 || k == 46
                                                    || (iPhone && k == 127)) {
                                                var pos = input.caret(), begin = pos.begin, end = pos.end;

                                                if (end - begin == 0) {
                                                    begin = k != 46 ? seekPrev(begin)
                                                            : (end = seekNext(begin - 1));
                                                    end = k == 46 ? seekNext(end)
                                                            : end;
                                                }
                                                clearBuffer(begin, end);
                                                shiftL(begin, end - 1);

                                                return false;
                                            } else if (k == 27) {//escape
                                                input.val(focusText);
                                                input.caret(0, checkVal());
                                                return false;
                                            }
                                        }
                                        ;

                                        function keypressEvent(e) {
                                            var k = e.which, pos = input
                                                    .caret();
                                            if (e.ctrlKey || e.altKey
                                                    || e.metaKey || k < 32) {//Ignore
                                                return true;
                                            } else if (k) {
                                                if (pos.end - pos.begin != 0) {
                                                    clearBuffer(pos.begin,
                                                            pos.end);
                                                    shiftL(pos.begin,
                                                            pos.end - 1);
                                                }

                                                var p = seekNext(pos.begin - 1);
                                                if (p < len) {
                                                    var c = String
                                                            .fromCharCode(k);
                                                    if (tests[p].test(c)) {
                                                        shiftR(p);
                                                        buffer[p] = c;
                                                        writeBuffer();
                                                        var next = seekNext(p);
                                                        input.caret(next);
                                                        if (settings.completed
                                                                && next >= len)
                                                            settings.completed
                                                                    .call(input);
                                                    }
                                                }
                                                return false;
                                            }
                                        }
                                        ;

                                        function clearBuffer(start, end) {
                                            for ( var i = start; i < end
                                                    && i < len; i++) {
                                                if (tests[i])
                                                    buffer[i] = settings.placeholder;
                                            }
                                        }
                                        ;

                                        function writeBuffer() {
                                            var val = buffer.join('');
                                            return input.val(val).val();
                                        }
                                        ;

                                        function checkInteger(str) {
                                            return str.match(/\d+/);
                                        }
                                        ;

                                        //Introduced checkIncomplete function
                                        function checkIsIncomplete(inputValue,
                                                isInitial) {
                                            var tc = 0, mc = 0, lm = -1;

                                            for ( var i = 0, pos = 0; i < len; i++) {
                                                if (tests[i]) {
                                                    tc++;
                                                    buffer[i] = settings.placeholder;
                                                    var c = isInitial ? inputValue
                                                            .charAt(pos++)
                                                            : inputValue
                                                                    .charAt(i);
                                                    if (tests[i].test(c)) {
                                                        mc++;
                                                        buffer[i] = c;
                                                        lm = i;
                                                    }
                                                }
                                            }
                                            if (tc != mc) {
                                                return lm;
                                            } else {
                                                return false;
                                            }
                                        }

                                        function checkVal(allow) {
                                            //try to place characters where they belong
                                            settings.allowIncompleteData = true;
                                            var test = input.val();

                                            if (checkInteger(test) == null) {
                                                settings.allowIncompleteData = false;
                                            }
                                            //if allowIncomplete is true and value is incomplete - Dharmendra
                                            if (settings.allowIncompleteData) {
                                                var chk = checkIsIncomplete(
                                                        test, allow);
                                                if (chk) {
                                                    writeBuffer();
                                                    return chk;
                                                }
                                            }
                                            //-End
                                            var lastMatch = -1;
                                            for ( var i = 0, pos = 0; i < len; i++) {
                                                if (tests[i]) {
                                                    buffer[i] = settings.placeholder;
                                                    while (pos++ < test.length) {
                                                        var c = test
                                                                .charAt(pos - 1);
                                                        if (tests[i].test(c)) {
                                                            buffer[i] = c;
                                                            lastMatch = i;
                                                            break;
                                                        }
                                                    }
                                                    if (pos > test.length)
                                                        break;
                                                } else if (buffer[i] == test
                                                        .charAt(pos)
                                                        && i != partialPosition) {
                                                    pos++;
                                                    lastMatch = i;
                                                }
                                            }

                                            if (!allow
                                                    && lastMatch + 1 < partialPosition) {

                                                if (!settings.allowIncompleteData) {
                                                    input.val("");
                                                    clearBuffer(0, len);
                                                } else {
                                                    writeBuffer();
                                                }
                                            } else if (allow
                                                    || lastMatch + 1 >= partialPosition) {
                                                writeBuffer();
                                                if (!allow)
                                                    input
                                                            .val(input
                                                                    .val()
                                                                    .substring(
                                                                            0,
                                                                            lastMatch + 1));
                                            }

                                            return (partialPosition ? i
                                                    : firstNonMaskPos);
                                        }
                                        ;

                                        input
                                                .data(
                                                        $.mask.dataName,
                                                        function() {
                                                            return $
                                                                    .map(
                                                                            buffer,
                                                                            function(
                                                                                    c,
                                                                                    i) {
                                                                                return tests[i]
                                                                                        && c != settings.placeholder ? c
                                                                                        : null;
                                                                            })
                                                                    .join('');
                                                        });

                                        if (!input.attr("readonly"))
                                            input
                                                    .one(
                                                            "unmask",
                                                            function() {
                                                                input
                                                                        .unbind(
                                                                                ".mask")
                                                                        .removeData(
                                                                                $.mask.dataName);
                                                            })
                                                    .bind(
                                                            "focus.mask",
                                                            function() {
                                                                focusText = input
                                                                        .val();
                                                                var pos = checkVal();
                                                                writeBuffer();
                                                                var moveCaret = function() {
                                                                    if (pos == mask.length)
                                                                        input
                                                                                .caret(
                                                                                        0,
                                                                                        pos);
                                                                    else
                                                                        input
                                                                                .caret(pos);
                                                                };
                                                                ($.browser.msie ? moveCaret
                                                                        : function() {
                                                                            setTimeout(
                                                                                    moveCaret,
                                                                                    0)
                                                                        })();
                                                            })
                                                    .bind(
                                                            "blur.mask",
                                                            function() {
                                                                checkVal();
                                                                if (input.val() != focusText)
                                                                    input
                                                                            .change();
                                                            })
                                                    .bind("keydown.mask",
                                                            keydownEvent)
                                                    .bind("keypress.mask",
                                                            keypressEvent)
                                                    .bind(
                                                            pasteEventName,
                                                            function() {
                                                                setTimeout(
                                                                        function() {
                                                                            input
                                                                                    .caret(checkVal(true));
                                                                        }, 0);
                                                            });
                                        //Perform initial check for existing values
                                        checkVal(true);
                                    });
                }
            });
})(jQuery);

但我必须像这样解决

(+91) 1111-111111

+91 

应该是固定的,没有人可以改变它。

0 个答案:

没有答案