Это происходит из-за поведения, связанного с типом ввода HTML5 number
в Chromium, и вы определенно не единственный , который не заботится об этом.
В прошлом я работал над этой проблемой, используя тип text
. Например, это сработало хорошо (только что протестировано в Chrome 11.0.696.71):
<input type="text"
placeholder="Enter Text"
name="inputName"
pattern="[0-9]*">
Такое поведение типа number
(по крайней мере для меня) определенно является ошибкой, поскольку стандарт HTML1 указывает, что number
должно иметь следующее значение при форматировании для отображения:
Алгоритм преобразования числа в строку с учетом введенного числа выглядит следующим образом: Возвращает действительное число с плавающей запятой, представляющее ввод.
И стандарт определяет «действительное число с плавающей запятой» здесь , и, насколько я вижу, в том числе группировка символов не ожидается.
Обновление
Я выделил проблему для следующего кода в кишечнике WebKit. Здесь я также включил строку, которая решает проблему:
// From LocalizedNumberICU.cpp
String formatLocalizedNumber(double number, unsigned fractionDigits)
{
NumberFormat* formatter = numberFormatter();
if (!formatter)
return String();
UnicodeString result;
formatter->setMaximumFractionDigits(clampToInteger(fractionDigits));
formatter->setGroupingUsed(FALSE); // added this line to fix the problem
formatter->format(number, result);
return String(result.getBuffer(), result.length());
}
На следующей неделе я в отпуске, но планирую отправить этот патч команде WebKit, когда вернусь. Как только они (будем надеяться) примут патч, Chromium должен вытащить его как часть обычного процесса обновления.
Вы можете увидеть исходный код здесь , исправленную ревизию здесь и разность
Исходный файл и пропатченный файл здесь . Последний патч был создан Shinya Kawanaka.