Можно ли симулировать нажатие клавиш в AngularJS? - PullRequest
0 голосов
/ 14 января 2019

Мне нужно, чтобы точка (.) Записывалась на входе всякий раз, когда запятая (,) нажимается для десятичного ввода, а не для текста. Мне нужно как-то симулировать Keypress или KeyDown программно.

Я перепробовал все ответы здесь , но ни один из них не сработал:

Я написал следующий код директивы для ввода:

app.directive('ngKommatopoint', function() {
    return {
      link : function($scope, element, attrs) {
              element.bind("keydown keypress", function(event) {
                      if(event.which === 188) {
                          element.trigger(
                              $.Event( 'keydown', { keyCode:190,which:190})
                          );
                     }
                  });
          },
    restrict: 'A'
  };  });

Это решение не работает, потому что оно никогда не вызывает событие "Dot". Есть идеи, почему это не работает?

1 Ответ

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

Используйте вместо этого парсеры / форматеры в ngModelController для перехвата ввода пользователя.

Ваше решение пропустит копирование / вставку, но анализаторы / форматеры не будут.

https://dzone.com/articles/parsers-and-formatters-custom

Вы можете обрабатывать все изменения в модели и анализировать их по мере необходимости.

Обновление

Вот скрипка: https://jsfiddle.net/gudzdanil/un56mjez/2/


app.directive('nodot', function(){
  return{
    require:'ngModel',
    link: function(scope, elem, attrs, ctrl){
      ctrl.$parsers.unshift(replace);
      function replace(val){
        var newVal = val.replace(/,/g, '.');
                ctrl.$viewValue = newVal;
        ctrl.$render()
                return newVal;
      }
    }
  };
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...