2016-12-12 5 views
0

Я в настоящее время пытаюсь установить фокус на textarea на ipad, который не коснулся пользователь.Фокус textarea на iOS с angularjs

Причина в том, что я хочу выполнить другое действие по одному крану, чем при двойном касании.

Я попытался сделать работу plnkr, но не смог. По каким-то причинам plnkr не хочет использовать мою обработку событий. Thatswhy я только мог показать вам мой код.

Plunker

Эта часть очень хорошо работает на Andriod, Windows Mobile, MacOS и ПК, но не КСН:

angular.module('App').direktive('setFocusOnInput', ['$timeout', function($timeout) { 
     return { 
      scope: { 
       trigger: '@setFocusOnInput', 
       elementId: '@' 
      }, 
      link: function($scope, $elm, $attr, $ctrl) { 
       $scope.$watch('trigger', function(value) { 
        if(value === $scope.elementId) { 
         $timeout(function() { 
          $elm.focus(); 
         }); 
        } else { 
         angular.element(document.activeElement).blur(); 
        } 
       }); 
       $elm.on('blur', function() { 
        $scope.trigger = null; 
       }); 
      } 
     } 
    }]); 

ответ

0

Я нашел решение, которое работало для меня:

.directive('setFocusOnInput', ['$timeout', function($timeout) { 
     return { 
      scope: { 
       trigger: '@setFocusOnInput', 
       elementId: '@' 
      }, 
      link: function($scope, $elm, $attr, $ctrl) { 
       $scope.$watch('trigger', function(value) { 
        if(value === $scope.elementId) { 
         if(window.navigator.userAgent.indexOf('iPad') > -1 || window.navigator.userAgent.indexOf('iPod') > -1) { 
          $elm.focus(); 
          $timeout(function() { 
           document.activeElement.focus(); 
          },750); 
         } else { 
          $timeout(function() { 
           $elm.focus(); 
          }); 
         } 
        } else { 
         angular.element(document.activeElement).blur(); 
        } 
       }); 
       $elm.on('blur', function() { 
        $scope.trigger = null; 
       }); 
      } 
     } 
    }]) 

iOS не принимает таймаут, чтобы установить элемент Dom как активный элемент. Но если он установлен, вам нужно еще раз сфокусироваться на activeElement. Это решение для сыра, но, возможно, у кого-то будет симулированная проблема и он сможет использовать это решение.

 Смежные вопросы

  • Нет связанных вопросов^_^