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

.directive('focusFirstEmptyInput', ['$timeout', function ($timeout) {
        return {
            restrict: "A",
            link: function (scope, element, attrs) {

                var focustElement = function () {
                    var keepGoing = true;
                    angular.forEach(element[0], function (field) {
                        if (!keepGoing) {
                            return;
                        }

                        if (field.tagName.toLowerCase() !== 'input')
                            return;

                        debugger;
                        var fieldValue = field.value;
                        if (!fieldValue) {
                            field.focus();
                            keepGoing = false;
                        }
                    });
                };

                $timeout(focustElement, 0);
            }
        };
    }]);

我正在遍历所有表单元素,并尝试着重于第一个空白字段。但是,当我调用focus()时,element没有被聚焦。可能是什么原因?

更新:

很奇怪,但是如果我删除调试器语句(或根本不打开检查器模式)并且不暂停javascript代码,它将首先关注空元素...。(我使用的是Google Chrome)

柱塞:http://plnkr.co/edit/YT0DoTjUVrrnVwmyrX0v?p=preview

最佳答案

您在错误的地方超时。您可以使用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);
            }
        };
    }]);

09-27 21:18