Jquery добавление запятых к вводимому числу с десятичными знаками при наборе

0

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

$('input.number').keyup(function(event) {

  // skip for arrow keys
  if(event.which >= 37 && event.which <= 40){
   event.preventDefault();
  }

  $(this).val(function(index, value) {
     return value
    .replace(/\D/g, "")
    .replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  });
});

Если у кого-то есть решение, это было бы замечательно.

Сценарий: http://jsfiddle.net/yWTLk/348/

ОБНОВЛЕНИЕ: Некоторые хорошие комментарии, но, возможно, кто-нибудь может подумать о том, как вводить текстовое поле, которое его редактирует и в то же время форматирует ваше число с запятыми и уважает десятичные числа. Что-то подсказывает мне, что это почти невозможно сделать, но посмотрим, сможет ли кто-нибудь подумать о решении.

И причина, почему его хорошо иметь автоматический формат при наборе текста, заключается в том, что, если вы вводите очень большое количество, вы можете потеряться во время его выполнения. Например:

  10000000000000000000000000000000000000000000

Это было бы кошмаром, чтобы войти правильно, поэтому автоматический формат скажет вам, если вы отсутствуете или не ноль. С другой стороны, после его проверки будет показана ошибка и, возможно, да, вы можете исправить ее, но это дополнительный шаг.

  • 0
    Что делать, если пользователь вставляет значение? Вещи для размышления.
  • 0
    это уже работает, проверьте обновленную скрипку.
Показать ещё 7 комментариев
Теги:
numbers
decimal

2 ответа

7

Мог бы сделать это, но вместо этого я должен указать номер, разделенный запятыми, кроме поля ввода.

$('input.number').keyup(function(event) {

  // skip for arrow keys
  if(event.which >= 37 && event.which <= 40){
   event.preventDefault();
  }

  $(this).val(function(index, value) {
      value = value.replace(/,/g,''); // remove commas from existing input
      return numberWithCommas(value); // add commas back in
  });
});

function numberWithCommas(x) {
    var parts = x.toString().split(".");
    parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    return parts.join(".");
}

http://jsfiddle.net/jpAmE/

6

Я думаю, что это может сделать то, что вы ищете. Предположения:

  1. Пользователям разрешается вводить только одну десятичную точку.
  2. после десятичной точки не допускается форматирование, т.е. запятые.

скрипка

$('input.number').keyup(function (event) {
    // skip for arrow keys
    if (event.which >= 37 && event.which <= 40) {
        event.preventDefault();
    }

    var currentVal = $(this).val();
    var testDecimal = testDecimals(currentVal);
    if (testDecimal.length > 1) {
        console.log("You cannot enter more than one decimal point");
        currentVal = currentVal.slice(0, -1);
    }
    $(this).val(replaceCommas(currentVal));
});

function testDecimals(currentVal) {
    var count;
    currentVal.match(/\./g) === null ? count = 0 : count = currentVal.match(/\./g);
    return count;
}

function replaceCommas(yourNumber) {
    var components = yourNumber.toString().split(".");
    if (components.length === 1)
        components[0] = yourNumber;
    components[0] = components[0].replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    if (components.length === 2)
        components[1] = components[1].replace(/\D/g, "");
    return components.join(".");
}
  • 0
    почему он отображается как объект typeof

Ещё вопросы

Сообщество Overcoder
Наверх
Меню