Angular Directive не слушает, если пользователь нажимает одну и ту же кнопку клавиатуры дважды - PullRequest
0 голосов
/ 06 июня 2019

Пользователь вводит или вставляет количество символов в поле ниже.Цель директивы ieCurrencyInput - принимать только числа.Тем не менее, пользователь может ввести один нецелочисленный символ, если он дважды нажмет кнопку символа на своей клавиатуре.Это также не работает, если пользователь пытается вставить один и тот же текст дважды, что означает, что пользователь может вставить нецелую строку.Поэтому я пытаюсь предотвратить это.

Поле формы:

<input class="form-control input-lg ng-pristine ng-valid ng-isolate-scope ng-empty ng-touched" 
       id="wizard-savings" ie-currency-input="true"
       ie-debounce="$analytics.track(updateWizInputsEventCategory, $analytics.actions.updateSavings, null, wizard.currentSavings)"
       ng-model="wizard.currentSavings">

Угловой код:

app.ngApp.directive('ieCurrencyInput', function ($filter, $browser) {
  function toViewValue(modelValue, viewValue) {

    if (modelValue == null) {
      return "";
    } else {
      return $filter('currencyShort')(modelValue, '$');
    }
  }

  return {
    restrict: 'A',
    require: 'ngModel',
    link: function postLink($scope, $element, $attrs, ngModelCtrl) {
      ngModelCtrl.$formatters.push(function(modelValue){
        return toViewValue(modelValue);
      });

      ngModelCtrl.$parsers.push(function(newViewValue){
        var newModelValue = app.isBlank(newViewValue) ? null : parseInt(newViewValue.replace(/[^0-9.]/g,''));
        ngModelCtrl.$viewValue = toViewValue(newModelValue, newViewValue);
        var currentPos = app.ngApp.getCaretPosition($element[0]);
        $element.val(ngModelCtrl.$viewValue);
        if (newModelValue == 0) {
          app.ngApp.setCaretPosition($element[0], 1);
        } else {
          var newPos = currentPos + ngModelCtrl.$viewValue.length - newViewValue.length;
          app.ngApp.setCaretPosition($element[0], newPos);
        }
        return newModelValue;
      });
    }
  };
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...