IE 输入元素焦点不适用于 angular 指令

IE input element focus not working with angular directive

我有一个 div 动态填充输入元素并将焦点设置在第一个输入字段上。焦点适用于 Chrome 但不适用于 IE。这是 plnkr http://plnkr.co/edit/b6urKKilDVRwuqVQfbWt

焦点实际上是在超时函数内完成的,但焦点似乎仍未对输入字段执行任何操作。我正在使用 angular 指令来创建我的表单元素。

directive('ngppParameters', ["$compile","$timeout",function($compile,$timeout) {
  return {
        restrict: 'E',       
        link:function($scope,$element,$attrs)
        {
            $scope.$watch("tree.length", function (value) {       

                if(value.length===0)
                    return;                

                $timeout(function() {
                    var fields = $("ngpp-parameters input").filter(":visible:first");
                    console.log("Setting the focus");
                    if(fields.length>0)
                    {
                       console.log("Setting focus");
                       fields[0].focus();                   

                    }
                },10);              
            });
        }        
    };

更新:

这是指令。

fields[0] 不是你想的那样(我以前也犯过同样的错误)。

你想要fields.eq(0)

https://api.jquery.com/eq/

您也可以直接拨打 fields.focus()。如果那里只有一个应该可以工作的话。

终于找到了问题所在,IE 正在处理禁用的 parent 并且不让焦点设置在 children 上。

我已经从指令 pp-field 中删除了 disabled="disabled" 属性,它按预期工作。除 IE 之外的所有其他浏览器都没有考虑 parent 的禁用状态。

确保使用 ng-disabled="" 而不是 disabled 属性,以使浏览器忽略它并按预期运行。