我目前正在尝试将焦点设置在ipad上的textarea上,而用户没有触及它。
这样做的原因是我希望在单击时采用另一种动作,而不是双击。
我试图做一个plnkr工作,但我做不到。由于某些原因,plnkr不想使用我的事件处理。 Thatswhy我只能告诉你我的代码。
这部分适用于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;
});
}
}
}]);
答案 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上设置另一个焦点。这是一个奶酪解决方案,但也许有人会有一个类似的问题,可以使用这个解决方案。