我正在使用digitalbush 屏蔽输入 jQuery 插件。它在网络浏览器和 iPhone 浏览器中运行良好,但不适用于 Android 移动设备。
我的问题:掩码在输入字段_ - _ - ___ 中。
当我输入数字时,它将 12345685555___- -
示例:http ://rossbender.com/temp/mask.html
有什么建议么?我该如何解决这个问题?
谢谢普拉萨德。
我正在使用digitalbush 屏蔽输入 jQuery 插件。它在网络浏览器和 iPhone 浏览器中运行良好,但不适用于 Android 移动设备。
我的问题:掩码在输入字段_ - _ - ___ 中。
当我输入数字时,它将 12345685555___- -
示例:http ://rossbender.com/temp/mask.html
有什么建议么?我该如何解决这个问题?
谢谢普拉萨德。
我通过三个操作解决了这个问题,这些操作已经为所有 Android 4.0+ 手机解决了这个问题:
type="tel"
到输入,触发数字键盘maxlength
属性或将其设置为一定不会干扰插入符号操作的值,例如20
.我尝试使用 Jonathan Rowny 提到的原始脚本,但我在 S3 - Chrome 浏览器上仍然遇到同样的问题。我认为这与输入type="tel"
和/或有关type="number"
。我最终不得不使用另一个插件。http://igorescobar.github.io/jQuery-Mask-Plugin/
jquery-mask(不要与jquery-masked-input混淆)非常相似,但语法略有不同。希望这可以帮助其他人解决这个问题。
jquery-masked-input 语法:
$("#phone").mask("(999) 999-9999");
VS
jquery-mask 语法:('#phone').mask('(000) 000-0000');
这在不久前已修复,但由于某种原因,发布在网站上的发行版从未接受过更改。如果您从原始源中获取,则修复有效:https ://raw.githubusercontent.com/digitalBush/jquery.maskedinput/master/src/jquery.maskedinput.js
在尝试了不同的掩码库(Inputmask、ui-mask、ngMask)之后,我最终使用了 jQuery-Mask-Plugin https://igorescobar.github.io/jQuery-Mask-Plugin/,它工作得很好,而且轻量级并且有据可查并且有 angularjs, react ,... 样本。
问题中使用的库不再维护。我将我的应用程序切换到了jQuery Mask Input,因为它运行良好,与以前的库有一个非常相似的基本 init 调用,使得转换非常容易,并且在本文发布时,jQuery Mask Input定期在 GitHub 上维护。
我的问题是当输入 3 或 4 位数字时,电话号码掩码器将光标移回第二个位置。在那之后,光标继续奇怪。在使用 Chrome 发布主要版本 51 的 Android 平板电脑中使用 jQuery Masked Input v1.4.1(旧库)时发现了该问题。
我刚刚遇到了这个问题,并通过从 asp 文本框中删除属性type="number"来解决它。之后,屏蔽输入甚至可以在移动设备上使用。
通过使用 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');
}
为了进一步增强 Tony Brasunas 接受的答案,请在 jquery.maskedinput.js 中为第 3 点添加以下代码段以动态增加 maxlength,这样它就不会干扰插入符号的操作。
删除输入的 maxlength 属性或将其设置为一定不会干扰插入符号操作的值,例如 20。
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);