输入类型编号不能与javascript格式化函数一起使用(与输入类型文本一起使用)

时间:2014-01-30 18:59:56

标签: javascript html5 input numbers

我正在研究一个有趣的错误,我有一个理论,并会喜欢其他一些意见。我遇到的问题是javascript格式化脚本似乎不适用于数字的输入类型,但它确实适用于输入类型的文本。下面的工作小提琴:

http://jsfiddle.net/TFME5/

在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);

0 个答案:

没有答案