使用angularjs在iOS上聚焦textarea

时间:2016-12-12 08:44:15

标签: javascript ios angularjs

我目前正在尝试将焦点设置在ipad上的textarea上,而用户没有触及它。

这样做的原因是我希望在单击时采用另一种动作,而不是双击。

我试图做一个plnkr工作,但我做不到。由于某些原因,plnkr不想使用我的事件处理。 Thatswhy我只能告诉你我的代码。

Plunker

这部分适用于Andriod,Windows Mobile,MacOS和PC,但不适用于iOs:

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;
                });
            }
        }
    }]);

1 个答案:

答案 0 :(得分: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-element设置为activeElement的超时。但如果设置了,则必须在activeElement上设置另一个焦点。这是一个奶酪解决方案,但也许有人会有一个类似的问题,可以使用这个解决方案。