При вводе этого типа в angularjs (1.6.1) дает undefined для значений от 9.03 до 9.05 включительно. Проблема воспроизводится с другими значениями, среди прочих 9.62, 9.63, 17.31.

<input type="number" step="0.01" data-ng-model="$ctrl.numericValue" />

Эта скрипка воспроизводит проблему. Просто нажмите вверх в числовой ввод.

Испытано на firefox и хроме под linux mint 18.

Кажется, он связан с атрибутом "step". Если установлено "0.001", проблем нет. Но я угрожал деньгами в этом приложении, поэтому нужно 2 десятичных знака.

Примечание: если значение изначально установлено в 9.03 через data-numeric-value, оно не undefined.

Любое решение для этой ошибки?

< Сильный > изменить

Обновлена скрипка для отображения поведения с step="0.01" и step="0.001"

изменить 2 Я сделал plunkr во время заполнения отчета об ошибке, чтобы обнаружить, что ошибка исправлена в версия "снимок", ведьма 1.6.2. Но эта версия пока недоступна для скачивания через сайт angularjs.

6
Johnny5 11 Янв 2017 в 17:03

3 ответа

Лучший ответ

Кажется, это ошибка в Angular. При использовании Angular 1.6.0 возникает та же проблема. Если вы используете Angular 1.5.9, похоже, он работает нормально. Кое-что между этими двумя версиями вызвало эту проблему, и это все еще не было найдено или решено в 1.6.1.

Так что лучший способ действий - это исправить ошибку с командой Angular.

Краткосрочным решением для вашего собственного проекта будет откат к Angular 1.5.9, если это возможно.

Я протестировал его на Windows 7 на Firefox и Chrome, чтобы получить эти результаты.

3
René Wolferink 11 Янв 2017 в 14:53

Это не очень хорошее решение, но вы можете использовать jquery. Вы должны включить JQuery до угловой:

 <script
    src="https://code.jquery.com/jquery-3.1.1.js"
    integrity="sha256-16cdPddA6VdVInumRGo6IbivbERE8p7CQR3HzTBuELA="
    crossorigin="anonymous"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>

Назначить идентификатор для поля ввода

<input id="numericValue1" type="number" step="0.01" ng-model="$ctrl.numericValue1" />

И затем используйте идентификатор, чтобы получить значение

ctrl.showValue1 = function(){
    return "value 1 is " + $('#numericValue1').val() + " and its type is " + typeof ctrl.numericValue1;
  };

Я надеюсь, что это работает нормально!

-1
Francesca 11 Янв 2017 в 16:50

Я считаю, что это странный сбой из-за точности JavaScript с плавающей точкой. Я предлагаю вам перенастроить входные данные, чтобы они имели другой шаг (предпочтительно с целыми числами, означающими шаг 1), а затем использовать извлеченное значение, деленное на 100.

0
Ghassen Louhaichi 11 Янв 2017 в 14:47