我正在研究一个有趣的错误,我有一个理论,并会喜欢其他一些意见。我遇到的问题是javascript格式化脚本似乎不适用于数字的输入类型,但它确实适用于输入类型的文本。下面的工作小提琴:
在Firefox中,如果您只是在这两个字段中输入数字,它会自动格式化为美国社会安全号码(123-45-6789)。如果您在Chrome中尝试相同的操作(支持数字类型),您会发现它在数字文本字段中不起作用。当格式化脚本开始写出连字符时,它基本上消除了该值。
我的理论是格式化脚本输出一个无效的数字,即当它重写123-4之类的东西时,它会因为那不是有效的浮点数而爆炸。
我通过在数字字段中键入“123-4”,然后点击该字段的chrome中的向上/向下箭头来充实这个理论。 Up给你“1”,down给出“-1”,所以123-4被视为0,我假设是浏览器说“不!”
这对我来说有问题是在移动设备上,在数字输入时,我想呈现一个数字键盘(输入类型=数字),但这看起来不会发生自动格式化。我遇到了与“/”自动编码日期相同的问题。再说一次,假设是因为我输出了无效数字。
使用input type = text时,autoformatting在移动设备上运行正常,但是您没有使用数字键盘获得更好的UX键盘功能。另外,输入type = tel不会给我任何问题,但是我假设这是因为连字符在该上下文中有效!
有没有人遇到过这个?我的理论听起来不错吗?
FormatSSN = function(e) {
var val = this.value.replace(/\D/g, ''), //only want numbers
len = val.length,
first,
middle,
last;
if (len > 3 && len < 6) {
first = val.slice(0,3);
middle = val.slice(3,5);
this.value = first + '-' + middle;
} else if (len > 5) {
first = val.slice(0,3);
middle = val.slice(3,5);
last = val.slice(5,9);
this.value = first + '-' + middle + '-' + last;
}
};
$(document).on('keyup', '#ssn_text', FormatSSN);
$(document).on('keyup', '#ssn_number', FormatSSN);