Javascript 关注AngularJs中html表单中的第一个空输入

Javascript 关注AngularJs中html表单中的第一个空输入,javascript,angularjs,focus,angularjs-directive,directive,Javascript,Angularjs,Focus,Angularjs Directive,Directive,我正试图使用angularjs指令来集中html表单中的第一个空输入。以下是我到目前为止编写的指令代码(并应用于表单元素): 我正在迭代所有表单元素,并试图聚焦第一个空字段。然而,当我调用focus()时,元素不会聚焦。原因可能是什么 更新: 奇怪,但是如果我删除调试器语句(或者根本不打开inspector模式)并且不暂停javascript代码,它将关注第一个空元素。。。。(我正在使用谷歌浏览器) Plunker:我做了一个测试,似乎是$timeout中的0值。将其更改为300或类似的值。有了

我正试图使用angularjs指令来集中html表单中的第一个空输入。以下是我到目前为止编写的指令代码(并应用于表单元素):

我正在迭代所有表单元素,并试图聚焦第一个空字段。然而,当我调用focus()时,元素不会聚焦。原因可能是什么

更新:

奇怪,但是如果我删除调试器语句(或者根本不打开inspector模式)并且不暂停javascript代码,它将关注第一个空元素。。。。(我正在使用谷歌浏览器)


Plunker:

我做了一个测试,似乎是$timeout中的0值。将其更改为300或类似的值。有了300个工作,您就可以打开或不打开开发人员工具


对我有用。

你的超时时间放错地方了。您可以使用jquery进行一些提升。我不知道如何过滤空输入,所以使用了for循环(请有人对此进行改进)

将此指令添加到模块中,然后在要为其设置焦点的父元素上添加属性“focus first”

.directive('focusFirst', ['$timeout', function ($timeout) {            
        return {                
            restrict: "A",
            link: function (scope, element, attrs) {                    
                $timeout(function() {
                    var inputs = element.find('input'),
                        count = inputs.length;

                    for (var i = 0; i < count; i++) {
                        if (inputs[i].value) {
                            continue;
                        }
                        inputs[i].focus();
                        break;
                    }
                }, 0);
            }
        };
    }]);
指令('focusFirst',['$timeout',函数($timeout){ 返回{ 限制:“A”, 链接:函数(作用域、元素、属性){ $timeout(函数(){ var inputs=element.find('input'), 计数=输入。长度; 对于(变量i=0;i我还添加了plunker。但是,我发现了问题所在。检查更新部分。影响它的断点使我认为这是一个比赛条件。。。这意味着它不能保证总是工作。
.directive('focusFirst', ['$timeout', function ($timeout) {            
        return {                
            restrict: "A",
            link: function (scope, element, attrs) {                    
                $timeout(function() {
                    var inputs = element.find('input'),
                        count = inputs.length;

                    for (var i = 0; i < count; i++) {
                        if (inputs[i].value) {
                            continue;
                        }
                        inputs[i].focus();
                        break;
                    }
                }, 0);
            }
        };
    }]);