Обновление iOS 8 — полноэкранный режим: экранная клавиатура кратковременно мигает при первом касании текстового поля, правильно отображается при втором касании

У меня странная проблема с моим веб-приложением (AngularJS HTML5). После обновления моего iPad до iOS8 экранная клавиатура ведет себя странно. При однократном касании текстового поля клавиатура (очень) ненадолго мигает и исчезает. Разглядеть практически невозможно - только темная вспышка внизу экрана. При повторном нажатии клавиатура открывается нормально. кто-нибудь еще сталкивался с этой проблемой? Это сводит меня с ума!

Это поле ввода:

HTML:

<input valid-number ng-disabled="planBody.isSubmitted==='Y'" type="tel" maxlength="13" ng-model="planBody.campaign.campaignparams.budget" ng-required="true" currency-input=""/>

JS:

    .directive('validNumber', function() {
      return {
        require: '?ngModel',
        link: function(scope, element, attrs, ngModelCtrl) {
          if(!ngModelCtrl) {
            return; 
          }

          ngModelCtrl.$parsers.push(function(val) {
            if(angular.isUndefinedOrNull(val))
            {
              val = "";
            }
            var clean = val.replace( /[^0-9]+/g, '');
            if (val !== clean) {
              ngModelCtrl.$setViewValue(clean);
              ngModelCtrl.$render();
            }
            return clean;
          });

          element.bind('keypress', function(event) {
            if(event.keyCode === 32) {
              event.preventDefault();
            }
          });
        }
      };
    })
    .directive('currencyInput', function($filter, $browser) {
    return {
        require: 'ngModel',
        link: function($scope, $element, $attrs, ngModelCtrl) {
            var listener = function() {
                var value = $element.val().replace(/,/g, '');
                if(value !== ""){
                   $element.val($filter('number')(value, false));
                }
                $scope.markForSaveAlert();
            };

            // This runs when we update the text field
            ngModelCtrl.$parsers.push(function(viewValue) {
                return viewValue.replace(/,/g, '');
            });

            // This runs when the model gets updated on the scope directly and keeps our view in sync
              ngModelCtrl.$render = function() {
              if(ngModelCtrl.$viewValue!==''){
                 $element.val($filter('number')(ngModelCtrl.$viewValue, false));
                }
             };

            $element.bind('change', listener);
            $element.bind('keydown', function(event) {
                var key = event.keyCode;
                // If the keys include the CTRL, SHIFT, ALT, or META keys, or the arrow keys, do nothing.
                // This lets us support copy and paste too
                if (key == 91 || (15 < key && key < 19) || (37 <= key && key <= 40)){
                  return;
                }
                $browser.defer(listener); // Have to do this or changes don't get picked up properly
            });

            $element.bind('paste cut', function() {
                $browser.defer(listener);  
            });
        }

    };
})

Обновление: похоже, это происходит только в полноэкранном режиме, а не в обычном мобильном Safari.


person nikjohn    schedule 27.10.2014    source источник
comment
Возможно, это проблема iOS8, в iOS 8.0.x было много подобных проблем, попробуйте обновиться до iOS 8.1 и надеюсь, что это решило вашу проблему.   -  person Yuvrajsinh    schedule 27.10.2014
comment
У меня стоит 8.1. Все еще есть проблема. Есть ли ссылка на общие проблемы, возникающие в 8.0.x? @Yuvrajsinh   -  person nikjohn    schedule 27.10.2014
comment
Вы выполняете какие-либо операции с текстовым полем?   -  person Yuvrajsinh    schedule 27.10.2014
comment
Я добавил код выше. Всего пара директив AngularJS   -  person nikjohn    schedule 30.10.2014


Ответы (1)


Я нашел ответ на этот. Я использовал отладчик консоли Safari, чтобы увидеть, какие события запускаются. Похоже, что ng-touch (Angular Touch) вызывал проблему, запуская несколько событий вместе с обычным событием щелчка, которое запускалось. Я удалил Angular Touch (который все равно не использовался), и функциональность заработала нормально.

person nikjohn    schedule 06.11.2014