Настроить десятичную точку вместо запятой в вводе номера HTML5 (на стороне клиента)

Я видел, что некоторые браузеры локализуют нотацию чисел input type="number".

Итак, теперь в полях, где мое приложение отображает координаты долготы и широты, я получаю материал вроде "51,983", где он должен быть "51.982559". Мое обходное решение заключается в использовании input type="text" вместо этого, но я бы хотел использовать ввод числа с правильным отображением десятичных знаков.

Есть ли способ заставить браузеры использовать десятичную точку для ввода номера независимо от локальных настроек на стороне клиента?

(Разумеется, в моем приложении я все равно исправляю это на стороне сервера, но в моей настройке мне также нужно, чтобы это было правильно на стороне клиента (из-за некоторого JavaScript)).

Спасибо заранее.

UPDATE На данный момент, проверяя в Chrome версии 28.0.1500.71 m в Windows 7, ввод номера просто не принимает десятичные знаки, отформатированные запятой. Предлагаемые предложения с атрибутом step, похоже, не работают.

http://jsfiddle.net/AsJsj/

Ответ 1

С атрибутом step, указанным в точности десятичных знаков, которые вы хотите, ваш числовой ввод html5 будет принимать десятичные значения. например. принимать значения, подобные 10,56; я означает 2 десятичных числа, сделайте следующее:

<input type="number" step="0.01" min="0" >

Вы можете указать атрибут max для максимально допустимого значения.

Ответ 2

В настоящее время Firefox отличает язык HTML-элемента, в котором находится вход. Например, попробуйте эту скрипту в Firefox:

http://jsfiddle.net/ashraf_sabry_m/yzzhop75/1/

Вы увидите, что цифры указаны на арабском языке, а запятая используется как разделитель с разделителями, что соответствует арабскому. Это связано с тем, что тегу BODY присваивается атрибут lang="ar-EG".

Затем попробуйте следующее:

http://jsfiddle.net/ashraf_sabry_m/yzzhop75/2/

Этот отображается с точкой в ​​виде десятичного разделителя, потому что вход завернут в DIV с учетом атрибута lang="en-US".

Итак, решение, к которому вы можете прибегнуть, состоит в том, чтобы обернуть ваши числовые входы с помощью элемента контейнера, который настроен на использование культуры, которая использует точки в качестве разделителя с разделителями.

Ответ 3

В соответствии с спецификацией вы можете использовать any как значение атрибута step:

<input type="number" step="any">

Ответ 5

К сожалению, охват этого поля ввода в современных браузерах очень низок:

http://caniuse.com/#feat=input-number

Поэтому я рекомендую рассчитывать на резервное копирование и полагаться на загруженный с тяжелой загрузкой ввод [type = text] для выполнения задания, пока это правило не будет принято.

До сих пор только Chrome, Safari и Opera имели аккуратную реализацию, но все остальные браузеры не работают. Некоторые из них даже не поддерживают десятичные знаки (например, BB10)!

Ответ 6

1) 51,983 - номер строкового типа, не принимающий запятую

поэтому u должен установить его как текст

<input type="text" name="commanumber" id="commanumber" value="1,99" step='0.01' min='0' />

заменить, с.

и изменить атрибут типа на число

$(document).ready(function() {
    var s = $('#commanumber').val().replace(/\,/g, '.');   
    $('#commanumber').attr('type','number');   
    $('#commanumber').val(s);   
});

Отъезд http://jsfiddle.net/ydf3kxgu/

Надеюсь, это решит вашу проблему.

Ответ 7

Я нашел статью в блоге, которая, кажется, объясняет что-то связанное: http://blog.isotoma.com/2012/03/html5-input-typenumber-and-decimalsfloats-in-chrome/

Вкратце:

  • step помогает определить область допустимых значений
  • по умолчанию step есть 1
  • Таким образом, домен по умолчанию является целым числом (между min и max, включительно, если задано)

Я бы предположил, что он сочетается с двусмысленностью использования запятой как разделителя тысяч и запятой в виде десятичной точки, а ваш 51,983 на самом деле странно разобран пятьдесят одна тысяча девятьсот восемь три.

По-видимому, вы можете использовать step="any", чтобы расширить домен до всех рациональных чисел в диапазоне, однако я сам не пробовал. Для широты и долготы я успешно использовал:

<input name="lat" type="number" min="-90.000000" max="90.000000" step="0.000001">
<input name="lon" type="number" min="-180.000000" max="180.000000" step="0.000001">

Это может быть не очень красиво, но оно работает.

Изменить: обновленная ссылка https://www.isotoma.com/blog/2012/03/02/html5-input-typenumber-and-decimalsfloats-in-chrome/

Ответ 8

Я не знаю, помогает ли это, но я споткнулся здесь, когда искал эту же проблему, только с входной точки зрения (т.е. я заметил, что мой <input type="number" /> принимал как запятую, так и точку при вводе значения, но только последняя была привязана к заданной на входе модели угловой модели I). Поэтому я решил, записав эту краткую директиву:

.directive("replaceComma", function() {
    return {
        restrict: "A",
        link: function(scope, element) {
            element.on("keydown", function(e) {
                if(e.keyCode === 188) {
                    this.value += ".";
                    e.preventDefault();
                }
            });
        }
    };
});

Затем на моем html просто: <input type="number" ng-model="foo" replace-comma /> будет заменять запятые точками "на лету", чтобы запретить пользователям вводить недопустимые (с точки зрения javascript, а не номера локалей!). Приветствия.

Ответ 9

Насколько я понимаю, HTML5 input type="number всегда возвращает input.value как string.

По-видимому, input.valueAsNumber возвращает текущее значение как число с плавающей запятой. Вы можете использовать это, чтобы вернуть нужное значение.

См. http://diveintohtml5.info/forms.html#type-number

Ответ 10

один параметр javascript parseFloat()... никогда не разбирайте "text chain" --> 12.3456 с точкой в ​​int... 123456 (int удаляет точку) разведите текстовую цепочку в FLOAT...

чтобы отправить это соглашение на сервер, отправляйте текстовую цепочку. HTTP отправляет только TEXT

в клиенте не следует разбирать входные координаты с помощью "int", работать с текстовыми строками

если вы печатаете шнуры в html с php или похожим... float to text и печатаете в html

Ответ 11

Рассматривали ли вы использование Javascript для этого?

$('input').val($('input').val().replace(',', '.'));

Ответ 12

Использовать lang атрибут ввода. Locale на моем веб-приложении fr_FR, lang = "en_EN" на номере ввода, и я могу без разницы использовать запятую или точку. Firefox всегда отображает точку, Chrome показывает запятую. Но оба партнера действительны.

Ответ 13

используйте шаблон

<input 
       type="number" 
       name="price"
       pattern="[0-9]+([\.,][0-9]+)?" 
       step="0.01"
       title="This should be a number with up to 2 decimal places."
>

удача