是否可以修复手机屏蔽组件中的代码?这是我使用掩码的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
应该是固定的,没有人可以改变它。