我正在使用digitalbush masked input jQuery插件。它在网页浏览器和iPhone浏览器中完美运行,但在Android移动设备上无法正常工作。
我的问题是:掩码在输入栏中为_ - _ - ___。
当我输入数字时,它将变成12345685555___--
示例:http://rossbender.com/temp/mask.html
有什么建议吗?我该如何解决这个问题?
谢谢 Prasad。
我正在使用digitalbush masked input jQuery插件。它在网页浏览器和iPhone浏览器中完美运行,但在Android移动设备上无法正常工作。
我的问题是:掩码在输入栏中为_ - _ - ___。
当我输入数字时,它将变成12345685555___--
示例:http://rossbender.com/temp/mask.html
有什么建议吗?我该如何解决这个问题?
谢谢 Prasad。
我采取了三个措施来解决这个问题,并使所有 Android 4.0+ 手机都得到了修复:
type="tel"
,以触发数字键盘maxlength
属性,或者将其设置为一定不会干扰插入符操作的值,例如 20
。type =“tel”
和/或type =“number”
有关。最终我不得不使用另一个插件。http://igorescobar.github.io/jQuery-Mask-Plugin/
jquery-mask(请勿与jquery-masked-input混淆)非常相似,但语法略有不同。希望这可以帮助其他人解决这个问题。$("#phone").mask("(999) 999-9999");
VS('#phone').mask('(000) 000-0000');
在尝试了不同的掩码库(Inputmask、ui-mask、ngMask)之后,我最终选择使用jQuery-Mask-Plugin https://igorescobar.github.io/jQuery-Mask-Plugin/,它表现出色,而且轻量级、文档完善,并且有angularjs、react等示例。
这个问题已经在一段时间之前被修复了,但因为某些原因网站上发布的版本没有包含这些更改。如果你从原始源代码中获取,修复就会生效:https://raw.githubusercontent.com/digitalBush/jquery.maskedinput/master/src/jquery.maskedinput.js
defs = $.mask.definitions;
tests = [];
partialPosition = len = mask.length;
firstNonMaskPos = null;
//insert snippet below
if (chrome && android) {
console.log("chrome && android");
var allAllowedRegExps = '';
jQuery.each(defs, function (key, value) {
allAllowedRegExps = allAllowedRegExps + key;
});
allAllowedRegExps = allAllowedRegExps.replace(/\[/g, '');
allAllowedRegExps = allAllowedRegExps.replace(/\]/g, '');
allAllowedRegExps = '[^' + allAllowedRegExps + ']';
var re = new RegExp(allAllowedRegExps, "g");
var actual = mask;
var replacedVal = actual.replace(re, "");
var actualValue = actual.length - replacedVal.length;
if ($(this).attr('maxlength') !== undefined) {
$(this).attr('maxlength', parseInt(this.attr('maxlength')) + parseInt(actualValue));
}
}
mask = String(mask);
我刚遇到这个问题,通过从 asp 文本框中删除属性 type="number" 来解决它。之后,掩码输入甚至在移动设备上也能正常工作。
该问题中使用的库已不再维护。我将我的应用程序切换到jQuery Mask Input,因为它运行良好,具有非常相似的基本初始化调用,使得转换非常容易,并且在发布此帖子时,jQuery Mask Input 在 GitHub 上定期维护。
我的问题是电话号码掩码器在输入3或4个数字时将光标移回第二个位置。此后,光标继续表现异常。在 Android 平板电脑上使用 Chrome 的主要版本 51 后,使用 jQuery Masked Input v1.4.1(旧库)时发现了这个问题。
我用1.4.1版本,并将最大长度设置为掩码中字符数加一,这对我有效。掩码限制了实际输入,而最大长度+1修复了无法在字段中输入数字的问题。
这可能是一个快速解决方案:
var ua = navigator.userAgent;
var isAndroid = /Android/i.test(ua);
var isChrome = /Chrome/i.test(ua);
// Fix masking on Chrome for mobile devices
if (isAndroid && isChrome) {
$('.price_input').attr('type','tel');
}