Теперь это еще больший беспорядок, чем когда этот вопрос был впервые задан. От чтения всех ответов и сообщений в блогах, которые я мог найти, вот резюме. Я также установил эту страницу, чтобы проверить все эти методы измерения уровня масштабирования .
Редактировать (2011-12-12): я добавил проект, который можно клонировать : https://github.com/tombigel/detect-zoom
screen.deviceXDPI / screen.logicalXDPI
(или для уровня масштабирования относительно масштабирования по умолчанию, screen.systemXDPI / screen.logicalXDPI
) var body = document.body,r = body.getBoundingClientRect(); return (r.left-r.right)/body.offsetWidth;
(благодаря этот пример или этот ответ ) screen.width
/ ширину экрана запросов мультимедиа (см. ниже) (использует тот факт, что screen.width
использует пиксели устройства, но ширина MQ использует пиксели CSS - благодаря Ширины Quirksmode ) -webkit-text-size-adjust:none
. document.width / jQuery(document).width()
(благодаря Дирк ван Остербош выше ). Чтобы получить соотношение по пикселям устройства (вместо относительного масштабирования по умолчанию), умножьте на window.devicePixelRatio
. parseInt(getComputedStyle(document.documentElement,null).width) / document.documentElement.clientWidth
(из этот ответ ) document.documentElement.offsetWidth
/ width of position:fixed; width:100%
div. здесь ( Таблица ширины Quirksmode говорит, что это ошибка, а innerWidth - CSS px). Мы используем положение: фиксированный элемент, чтобы получить ширину окна просмотра , включая пространство, в котором полосы прокрутки ; document.documentElement.clientWidth исключает эту ширину. Это нарушается с тех пор в 2011 году; Я не знаю, как увеличить уровень масштабирования в Opera. Вот двоичный поиск для Firefox 4, так как я не знаю какой-либо переменной, где она отображается:
Dummy element to test media queries.
Я не знаю, помогает ли это, но я наткнулся на эту проблему, только с точки зрения ввода (т.е. я заметил, что мой <input type="number" />
принимал как запятую и точка при наборе значения, но только последняя привязана к модели угловой 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, просто: <input type="number" ng-model="foo" replace-comma />
будет заменять запятые точками «на лету», чтобы пользователи не могли вводить неверные данные (из javascript, а не локальный!). Приветствия.
В настоящее время 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"
.
So , решение, к которому вы можете прибегнуть, состоит в том, чтобы обернуть ваши числовые входы элементом контейнера, который настроен на использование культуры, которая использует точки в качестве разделителя десятичных чисел.
Насколько я понимаю, HTML5 input type="number
всегда возвращает input.value
как string
.
По-видимому, input.valueAsNumber
возвращает текущее значение как число с плавающей запятой. Вы можете использовать это, чтобы вернуть нужное значение.
Согласно spec , вы можете использовать any
как значение атрибута step
:
<input type="number" step="any">
один параметр - javascript parseFloat()
... никогда не анализировать «text chain" --> 12.3456
с точкой в int ... 123456
(int удалить точку) разделить текстовую цепочку на FLOAT ...
, чтобы отправить эти коорды серверу, отправляет цепочку текста. HTTP
отправляет только TEXT
в клиенте, чтобы не разбирать входные координаты с помощью «int
», работа с текстовыми строками
, если вы печатаете шнуры в html с php или похожим ... float to text и печатаете в html
Я нашел статью в блоге, которая, кажется, объясняет что-то, связанное с этим: 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/
Рассматривали ли вы использование Javascript для этого?
$('input').val($('input').val().replace(',', '.'));
К сожалению, охват этого поля ввода в современных браузерах очень низок:
http://caniuse.com/#feat=input-number
Поэтому я рекомендую рассчитывать на резервную копию и полагаться на загруженный с тяжелой загрузкой ввод [type = text] для выполнения задания, пока это правило не будет принято.
До сих пор только Chrome, Safari и Opera имели аккуратную реализацию, но все остальные браузеры не работают. Некоторые из них даже не поддерживают десятичные знаки (например, BB10)!
С атрибутом step , указанным в точности десятичных знаков, вы хотите, чтобы ваш числовой ввод html5 принимал десятичные значения. например. принимать значения, подобные 10,56; i означает 2 десятичных числа, сделайте следующее:
<input type="number" step="0.01" min="0" lang="en" value="1.99">
Вы можете дополнительно указать атрибут max для максимально допустимого значения.
Изменить Добавить атрибут lang в элемент ввода с языковым значением, которое форматирует десятичные знаки с точкой вместо запятой
Использовать lang атрибут на входе. Locale на моем веб-приложении fr_FR, lang = "en_EN" на номере ввода, и я могу без разницы использовать запятую или точку. Firefox всегда отображает точку, Chrome показывает запятую. Но оба партнера действительны.
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/
Надеюсь, что это решает вашу проблему
$("input[type=number]").on("keydown", function(e) { if(e.keyCode === 188) { this.value += "."; e.preventDefault(); }});
(как только ваша страница полностью загрузилась вместе со всеми входными номерами) – Andrea Aloi 18 March 2015 в 15:40888,
установка свойстваvalue
выдает предупреждение о том, что888.
не является допустимым числом (для регулярного выражения требуется по крайней мере одно число после точки) и заполняет поле. Написание точки работает, хотя, вероятно, потому, что вход учитывает его значение «в процессе» и ожидает ввода большего числа цифр – svvac 11 September 2017 в 09:45