Настроить десятичную точку вместо запятой в вводе номера HTML5 (на стороне клиента)
Я видел, что некоторые браузеры локализуют нотацию чисел input type="number"
.
Итак, теперь, в полях, где мое приложение отображает координаты долготы и широты, я получаю материал вроде «51,983», где он должен быть «51.982559». Моим обходным путем является использование input type="text"
вместо этого, но я хотел бы использовать ввод числа с правильным отображением десятичных знаков.
Есть ли способ заставить браузеры использовать десятичную точку ввода количества, независимо от локальных настроек на стороне клиента?
- Хранилище типов данных типа C ++
- long / bigint / десятичный эквивалентный тип данных в R
- В чем разница между кастингом и конверсией?
- Создание экземпляра Generic с переменной, содержащей тип
- Преобразование std :: __ cxx11 :: string в std :: string
(Разумеется, в моем приложении я все равно исправляю это на стороне сервера, но в моей настройке мне также нужно, чтобы это было правильно на стороне клиента (из-за некоторого JavaScript)).
Заранее спасибо.
ОБНОВЛЕНИЕ На данный момент, проверяя в Chrome версии 28.0.1500.71 m в Windows 7, ввод номера просто не принимает десятичные знаки, отформатированные с запятой. Предлагаемые предложения с атрибутом step
не работают.
http://jsfiddle.net/AsJsj/
- Совместимость шаблонов с несколькими типами Scala
- В чем разница между «1L» и «1»?
- Почему переменные конструктора конструктора объекта C # 3.0 необязательны?
- Как я могу хранить объекты разных типов в контейнере C ++?
- Что представляет собой тип, за которым следует _t (underscore-t)?
- Каков правильный тип индексов массивов в C?
- Динамически найти class, представляющий примитивный тип Java
- Как разрешить «должен быть экземпляр строки, строка, заданная» до PHP 7?
С атрибутом шага, указанным для точности десятичных знаков, которые вы хотите, ваш числовой ввод html5 будет принимать десятичные значения. например. принимать значения, подобные 10,56; Я имею в виду 2 десятичных числа, сделайте следующее:
Вы можете дополнительно указать атрибут max для максимально допустимого значения.
Изменить Добавить атрибут lang в элемент ввода с использованием значения языкового стандарта, которое форматирует десятичные знаки с точкой вместо запятой
В настоящее время 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"
.
Таким образом, решение, к которому вы можете прибегнуть, состоит в том, чтобы объединить ваши числовые входы с элементом контейнера, который настроен на использование культуры, которая использует точки в качестве разделителя десятичных чисел.
Согласно спецификации , вы можете использовать any
значение атрибута step
:
К сожалению, охват этого поля ввода в современных браузерах очень низок:
http://caniuse.com/#feat=input-number
Поэтому я рекомендую рассчитывать на резервную копию и полагаться на загруженный с тяжелой загрузкой ввод [type = text] для выполнения задания, пока это правило не будет принято.
Пока что только Chrome, Safari и Opera имеют аккуратную реализацию, но все другие браузеры не работают. Некоторые из них даже не поддерживают десятичные знаки (например, BB10)!
Я не знаю, помогает ли это, но я наткнулся на эту проблему, только с входной точки зрения (т.е. я заметил, что мой принимал как запятую, так и точку, когда набрав значение, но только последнее связано с моделью угловой j, назначенной на вход). Поэтому я решил, записав эту краткую директиву:
.directive("replaceComma", function() { return { restrict: "A", link: function(scope, element) { element.on("keydown", function(e) { if(e.keyCode === 188) { this.value += "."; e.preventDefault(); } }); } }; });
Затем, на моем html, просто: будет заменять запятые точками «на лету», чтобы пользователи не вводили неверные данные (с точки зрения javascript, а не локальный номер!). Приветствия.
Я нашел статью в блоге, которая, как представляется, объясняет что-то связанное: http://blog.isotoma.com/2012/03/html5-input-typenumber-and-decimalsfloats-in-chrome/
В итоге:
-
step
помогает определить область допустимых значений -
step
по умолчанию:1
- таким образом, домен по умолчанию является целым числом (между
min
иmax
, включительно, если задано)
Я бы предположил, что это связано с двусмысленностью использования запятой в виде разделителя на тысячу разделителей против запятой в виде десятичной точки, а ваши 51,983
– это, по сути, странно разобранные пятьдесят одна тысяча девятьсот восемь три.
Очевидно, вы можете использовать step="any"
чтобы расширить область до всех рациональных чисел в диапазоне, однако я сам не пробовал. Для широты и долготы я успешно использовал:
Возможно, это некрасиво, но это работает.
Изменить: обновленная ссылка https://www.isotoma.com/blog/2012/03/02/html5-input-typenumber-and-decimalsfloats-in-chrome/
1) 51,983 – номер строкового типа, не принимающий запятую
поэтому u должен установить его как текст
заменить .
и изменить тип атрибута на число
$(document).ready(function() { var s = $('#commanumber').val().replace(/\,/g, '.'); $('#commanumber').attr('type','number'); $('#commanumber').val(s); });
Проверьте http://jsfiddle.net/ydf3kxgu/
Надеюсь, это решит вашу проблему
Насколько я понимаю, input type="number
HTML5 input type="number
всегда возвращает input.value
как string
.
По-видимому, input.valueAsNumber
возвращает текущее значение как число с плавающей запятой. Вы можете использовать это, чтобы вернуть нужное значение.
Вы рассматривали использование Javascript для этого?
$('input').val($('input').val().replace(',', '.'));
один параметр – javascript parseFloat()
… никогда не javascript parseFloat()
« text chain" --> 12.3456
с точкой в int … 123456
(int удаляет точку) анализирует текстовую цепочку в FLOAT …
чтобы отправить эти коорды на сервер, отправляйте текстовую цепочку. HTTP
отправляет только TEXT
в клиенте не удается разобрать входные координаты с помощью « int
», работать с текстовыми строками
если вы печатаете шнуры в html с php или похожим … float to text и печатаете в html
Использовать lang атрибут на вкладке. Locale на моем веб-приложении fr_FR, lang = “en_EN” на номере ввода, и я могу без разницы использовать запятую или точку. Firefox всегда отображает точку, Chrome показывает запятую. Но оба партнера действительны.
использовать шаблон
удачи