2014-10-27 6 views
0

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

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

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

+0

Возможно, проблема с iOS8, iOS 8.0.x имела много проблем, таких как попытка обновления до iOS 8.1, и надеемся, что это решило вашу проблему. – Yuvrajsinh

+0

Я работаю 8.1. Все еще проблема. Есть ли ссылка на общие проблемы, которые возникали на [email protected] – nikjohn

+0

Выполняете ли вы какие-либо операции в текстовом поле? – Yuvrajsinh

ответ

0

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