2013-02-21 3 views
6

У меня проблема с номером ввода на форме. Когда я ввожу число, скажем 88.2 и отправляю его, проблем нет. Но когда этот другой человек делает то же самое, вы можете увидеть в php-коде, если вы эхо-переменную от ввода номера, что он удалил десятичную точку (.).Вход в HTML-код удаляет десятичную точку?

Он не удаляет свою десятичную точку, когда использует запятую, но когда я использую запятую, она удаляет это для меня. Есть ли способ исправить это и заставить его принимать только "." как десятичная точка?

Вот вход:

<input id="version" name="version" step="0.1" min="1.0" max="250.0" type="number" class="input-small" placeholder="87.2"></input> 

Там нет ничего в коде PHP, что это необычно, только

echo $_POST['version']; 

input-small css:

.input-small { 
    width: 90px; 
} 
+0

Я считаю, '<входной тип = "число">' принимает только целые числа в качестве допустимых значений. Любые допустимые десятичные знаки, вероятно, являются неправильной/нереализованной проверкой браузером. –

+2

Примечание: европейцы используют запятую для десятичной метки. Можете ли вы заставить культуру установить где-нибудь? –

+0

Я знаю, что мы используем разные метки, но нет ли способа сделать это НЕ удалять точку? Если другой парень входит в 88.2, он появляется как 882, его действительно раздражает. –

ответ

2

Support to <input type=number> все еще очень ограничены, неполным и b uggy.

Например, в IE 10 и Firefox 19 нет поддержки. Элемент возвращается к элементу <input type=text>, что означает, что любая строка принимается как входной и передается на сервер как таковой, без проверки ,

В браузерах, поддерживающих его, например, в Chrome, поведение варьируется и, как ожидается, будет изменяться, поскольку HTML5 CR definition намеренно оставляет его открытым: браузер должен как-то предоставить виджет для ввода цифр и гарантировать, что данные, посланные на сервер, верны в соответствии с атрибутами элемента (в пределах заданного диапазона и т. д.).

На практике реализация зависит от локали браузера, и вы не можете контролировать это как автора. Это означает, что браузер может принять 88.2, или он может принять 88,2 (и внутренне преобразовать его в 88.2), или он может принять оба, или он может в принципе принимать вход только в иероглифы (и внутренне преобразовывать его в каноническая форма). Он может даже анализировать ввод пользователя, так что любые лишние символы просто отбрасываются, а это значит, что 88FOO, а также 88.2 могут быть усечены до 88, когда запятая является десятичным разделителем.

Что происходит в вашем случае, сложно решить, поскольку браузеры и платформы не описаны, и непонятно, что получает сервер. Но главное, что вообще нельзя полагаться на <input type=number>. Он может использоваться в контролируемой среде, где каждый использует ту же версию одного и того же браузера в той же операционной системе, вплоть до языковой версии и языковых настроек. В противном случае используйте <input type=text> для ввода цифр и проанализируйте входную серверную сторону и, возможно, предварительно проверьте его на стороне клиента и убедитесь, что вы информируете пользователя о ожидаемом формате ввода (например, десятичная запятая или десятичная точка).

Смежные вопросы