【问题标题】:Focus on input text after selecting option from selectbox in AngularJS从AngularJS中的选择框中选择选项后专注于输入文本
【发布时间】:2017-06-13 04:43:45
【问题描述】:

从选择框中选择选项后,我试图将焦点设置在输入类型文本上。选择选项后,它将输入聚焦纳秒,然后再次聚焦在选择框上。

这是fiddle

这里是代码

    <div ng-controller="MyCtrl" layout layout-align="center center">
        <md-select ng-model="myModel" placeholder="Pick" ng-change="onChange()" md-on-open="onOpen()">
            <md-option value="0">Zero</md-option>
            <md-option value="1">One</md-option>
        </md-select>

        <input type="text" id="fc">
    </div>
<script>
    angular.module('MyApp', ['ngMaterial'])
    .controller('MyCtrl', function ($scope) {
        $scope.onChange = function() {
            document.getElementById('fc').focus();
        };

        $scope.onOpen = function() {
           document.getElementById('fc').focus();
        };
    })
</script>

【问题讨论】:

  • 这似乎与角度材料下拉菜单有关......但我不确定是什么原因造成的。如果您使用标准的 HTML 选择它工作正常。我确实注意到这适用于 md-select,但不再使用 $scope.$watch 不是一个好习惯。 $scope.$watch('myModel', function() { $document[0].getElementById('fc').focus(); });
  • @sledsworth 是的,它的棱角材料。试图用有角度的材料来实现这一点。 $watch 有什么问题?
  • 说没有问题,但是随着 Angular 1.5 和 > 的发布,无论如何,根据我的理解,建议使用组件生命周期钩子而不是使用 $watch。
  • 我尝试使用 $watch,它不起作用。
  • 你确定将 $document 和 $scope 注入你的控制器了吗?

标签: javascript angularjs angularjs-material


【解决方案1】:

正如 cmets 中提到的,这可能是一个 angular-material 错误,因为如果我们使用标准选择,它就可以正常工作。 (我认为应该创建一个github issue

也就是说,在修复错误之前,您可以制定一个丑陋的解决方法来解决它:附加一个指令以在选择更改时手动关注输入(使用 $timeout)。

指令:注意超时。这需要相当长的时间......(它的工作时间为 250 毫秒):

.directive('focus', function($timeout) {
   return function(scope, elem, attr) {
      scope.$on(attr.focus, function(e) {
        $timeout(function() {        
          elem[0].focus();         
        }, 250);
      });
   };
})

controller :在选择改变时广播事件。

$scope.onChange = function() {
   $scope.$broadcast('selectChanged');
};

查看:将焦点指令附加到您的输入元素:

<input type="text" id="fc" focus="selectChanged"> 

我已经分叉了你的 jdsfiddle。 Here 你可以看到它在工作。

希望对你有帮助

【讨论】:

  • 我试过了。它不工作。你是对的,它的错误问题。
  • 是的,如果你检查你更新的小提琴,它根本不起作用。
  • 嗨@user3288891!这很奇怪......我看到它在 chrome 上运行良好。您能否尝试稍微增加超时时间(也许 250 对所有情况都不够),请告诉我您的想法
  • 太棒了@user3288891!我知道这是一个丑陋的解决方法......但至少你有一个临时解决方案,直到角度材料错误得到修复。很高兴为您提供帮助
猜你喜欢
  • 2015-02-18
  • 2014-07-15
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多