Используйте точечную запись с фильтром угловых чисел

0

У меня есть поле ввода. Пользователь вводит число. Мне нужно, чтобы этот номер был правильно отформатирован с точками, представляющими входные данные тысяч (не десятичных): 5600 → составляет 5 600 (пять тысяч шестьсот) пользовательских данных: 56000 → составляет 56 000 и т.д.

Мне нужно, чтобы номер был правильно отформатирован ВНУТРИ поля ввода.

У меня есть скрипка: http://jsfiddle.net/El4a/KPeBD/1059/

Эта скрипка отлично работает, но она использует фильтр числа от углового, поэтому она форматирует числа с запятой. Однако мне нужна точка-нотация.

Поэтому я попытался заменить запятую вручную точкой.

 var listener = function() {

            var value = $element.val().replace(/,/g, '') //delete all notations

            var x = $element.val($filter('number')(value, 0)) //filter
            $element.val(x).replace(/,/g, '.') //replace comma by dot
        }

Это не сработало.

Затем я попытался использовать локаль cdn (как видно из связанной скрипты). Казалось, что это решение сначала создало:

Изображение 174551

Но когда добавляется следующий 0, он переворачивается и делает:

Изображение 174551

Я решил, что мне также пришлось изменить следующую строку

var value = $element.val().replace(/,/g, '')

в

var value = $element.val().replace(/./g, '')

но тогда поле ввода полностью непригодно.

Надеюсь, у кого-то есть решение для меня!

  • 0
    Просто удалил var value = $ element.val (). Replace (/, / g, ''), и кажется, что он отображает то, что вы хотите: jsfiddle.net/Ldt3g201
  • 0
    Он должен отформатировать это внутри поля ввода. Когда я проверяю вашу скрипку, это не дает мне никакого формата внутри поля, только вне его.
Теги:
filter
locale

2 ответа

0

OMG, я наконец нашел это...

Я забыл сбежать от проклятого. голец:

поэтому изменение

var value = $element.val().replace(/./g, '')

в

var value = $element.val().replace(/\./g, '')

заставил его работать

48 часов хорошо проведенных...

0

Я удалил директиву, так как это не очень полезно для фильтрации числа.

мы можем использовать angular filter ($filter) для того же самого. изменил код на

myApp.filter('number', ['$filter', function ($filter) {
return function (input, symbol, fraction) {
  if (input) {
    var decimal = input.toString().split('.')[1],
      value = input.toString().split('.')[0],
      filtered = value.replace(/(?=(\d\d\d)$)/g, ".");
    return (decimal) ? (fraction > 0 ? filtered + '.' + decimal.slice(0, fraction) : filtered) :  filtered;
  } else {
    return 0
  }
}
}])

жаль, что я удалил весь раздел директивы и обновил jsFiddle.

Вот обновленная демоверсия

  • 0
    Нет, извините, я думаю, что вы не поняли. Я отредактирую свой вопрос. В вашей скрипке поле ввода показывает, например, 650000000 .... без использования а.

Ещё вопросы

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