маска ввода удаляет второй ноль после десятичной точки в фокусе - PullRequest
0 голосов
/ 11 апреля 2019

Я использую маску ввода для поля ввода валюты (USD). Я также использую dinero.js для работы с числами с плавающей запятой, что требует передачи ему целого числа. Проблема заключается в том, что когда пользователь нажимает на поле ввода, вторая ноль после десятичной точки удаляется маской ввода, что приводит к неправильным значениям формы при преобразовании в целое число.

Это моя маска ввода:

 $('body').on('focus', 'input.money', function(){
        $(this).inputmask("numeric", {
            radixPoint: ".",
            groupSeparator: ",",
            digits: 2,
            autoGroup: true,
            prefix: '$',
            oncleared: function () { $(this).val(''); }
        });
    });

Когда форма отправлена, я убираю десятичную точку и просто передаю ее своей функции ajax, а если нет десятичной, я умножаю на 100 и передаю ее.

поэтому в описанном выше примере, если ввод предварительно заполняется $ 100,00 при загрузке страницы, а затем я нажимаю на него, он становится $ 100,0. Затем, если бы мне нужно было просто вернуться назад и ввести $ 10, он сохраняет значение .0, поэтому введенное значение составляет $ 10.0.

При отправке формы это удаляет десятичную дробь, и значение становится целочисленным значением 100, которое затем неправильно устанавливается как значение $ 10,00.

Надеюсь, это имеет смысл. Я планирую добавить проверку формы, чтобы перед отправкой формы было 2 знака после запятой, но это также беспокоит меня с точки зрения UX. Мне кажется, что я использовал этот плагин в прошлом, и он работал очень хорошо, поэтому я чувствую, что я что-то здесь испортил.

Подводя итог: если значение заполняется $ 100,00 при загрузке страницы, когда поле получает фокус, я хочу, чтобы значение оставалось $ 100,00, а не изменялось на $ 100,0.

Вот как я убираю десятичную из значений. Я также использую это для значений, выходящих из БД, поэтому я также убираю $ и ,.

function strip(value) {
    if(value.indexOf('.') > -1) {
      return parseInt(value.replace('$','').replace(',','').replace('.','')) || 0;
    } else {
      return parseInt(value.replace('$','').replace(',','')) * 100 || 0;
    }

  }
...