Как мне объединить две функции Javascript, чтобы разрешить трехзначные запятые и одну десятичную точку? - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь объединить две функции Javascript в один код. Первая функция, предназначенная для класса ".commas", вставляет запятую после 3 цифр. Вторая функция с именем «floatKey» допускает использование только одной десятичной точки перед последними двумя цифрами.

Я попытался вставить функцию класса ".commas" во вторую и удалил инструкцию "event.preventDefault if", но результат оказался ненадежным - он позволял больше цифр после запятой вместе с запятыми. Также были удалены все запятые перед десятичной точкой. Я также разрешил использовать charCode 44 как исключение для оператора if в функции floatKey, но все, что он делал, это показывал и мгновенно пропускал запятые. Как бы я совместил эти две функции, чтобы заставить обе работать?

Мои коды: функция класса ".commas":

$(".commas").keyup(function(event){
  if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
  }
  var $this = $(this);
  var num = $this.val().replace(/,/gi, "");
  var num2 = num.split(/(?=(?:\d{3})+$)/).join(",");
  console.log(num2);
  $this.val(num2);
});

функция "floatKey":

function floatKey(el, evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode;
    var number = el.value.split('.');
    if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
        return false;
    }
    if(number.length>1 && charCode == 46){
        return false;
    }
    var caratPos = getSelectionStart(el);
    var dotPos = el.value.indexOf(".");
    if( caratPos > dotPos && dotPos>-1 && (number[1].length > 1)){
        return false;
    }
    return true;
}

Я надеюсь, что объяснил свою проблему достаточно ясно, спасибо за вашу помощь.

1 Ответ

0 голосов
/ 08 января 2019

Пожалуйста, смотрите: Javascript разделитель тысяч / формат строки

Рассмотрим следующее.

$(function() {
  function formatFloat(nStr) {
    var result;
    var dec = nStr.indexOf(".");
    var x;
    if (dec > 0) {
      x = nStr.split(".");
      x[0] = parseInt(x[0]);
    } else {
      x = [];
      x.push(parseInt(nStr));
    }
    result = x[0].toLocaleString('en');
    if (dec > 0) {
      result = result + "." + x[1].slice(0,2);
    }
    return result;
  }
  $(".commas").keyup(function(e) {
    e.preventDefault();
    // Strip previous formatting
    var v = $(this).val().split(",").join("");
    // enter new formatting
    $(this).val(formatFloat(v));
    return false;
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Number: <input class="commas" type="text" /></p>

Здесь мы разбиваем строку, если есть десятичная точка .. Мы можем использовать .toLocaleString("en") для локализации номера.

Метод toLocaleString () возвращает строку с чувствительным к языку представлением этого числа.

Это делает всю тяжелую запятую. Затем мы добавляем обратно десятичное значение, если необходимо.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...