启用后,请关注html元素

时间:2016-12-02 14:11:41

标签: javascript jquery html css angularjs

我遇到了以下问题:我想专注于输入。但是我有一个在页面加载时触发的微调器,只有在完成某些http请求时才会隐藏它。此外,所有输入都被禁用,直到请求未完成。所以它看起来像这样:

<fieldset ng-disabled="!noPendingRequests">
    ...
    <input id="input-to-focus-on" uib-datepicker-popup="MM/dd/yyyy" type="text" ng-model="startDate" ... />
    <spinner ng-hide="noPendingRequests"></spinner>
</fieldset>

Spinner是一个自定义的Angular指令。需要在#input-to-focus-on输入上自动对焦,但它不起作用。在使用$q.all解析所有http请求后,我试图集中注意力。但这也行不通。我想这是因为$q中的回调在输入启用之前被触发。我也试过像这样的手动启用:

$q.all(somePromises).then(function() {
    angular.element('#input-to-focus-on')[0].disabled = false;
    angular.element('#input-to-focus-on')[0].tabIndex = 1;
    angular.element('#input-to-focus-on').focus();
 });

我不知道该怎么做,并希望得到任何帮助。先谢谢你,伙计们!

2 个答案:

答案 0 :(得分:2)

尝试将焦点调用包装在$timeout块中。

$timeout(function () {
  angular.element('#input-to-focus-on').focus();
});

答案 1 :(得分:2)

试试这个:

$q.all(somePromises).then(function() {
   $timeout(function () {
      angular.element('#input-to-focus-on')[0].focus();
    });
});

另外,请确保将$ timeout注入控制器。