angularjs - 专注于提交时 .ng-invalid 的第一个字段 - 不适用于 radios-inline

标签 angularjs angular-schema-form

我正在使用 Set focus on first invalid input in AngularJs form 上接受的答案中的指令要做到这一点:

app.directive('accessibleForm', function () {
    return {
        restrict: 'A',
        link: function (scope, elem) {

            // set up event handler on the form element
            elem.on('submit', function () {

                console.log("inside focus directive");
                // find the first invalid element
                var firstInvalid = elem[0].querySelector('.ng-invalid');
                //if we find one, set focus
                if (firstInvalid) {
                    firstInvalid.focus();
                }
            });
        }
    };
});

只要我不使用内联 radio ,焦点就可以工作。请引用:http://jsfiddle.net/mutharasus/mu7y4k8f/

但如果第一个错误恰好发生在 radio 内联字段上,则焦点不起作用。请引用:http://jsfiddle.net/mutharasus/00jzbL6g/

我不确定如何修复。请帮忙。

最佳答案

radio-inlineng-invalid 类添加到字段标签,而不是每个单独的 radio 输入。

您可以更改该指令并在自定义指令中实现所需的行为(您需要将 ng-invalid 添加到每个 radio 输入)或更改 accessibleForm 指令以检查无效元素是否为一个标签,在这种情况下,找到与其关联的第一个 radio 输入:

app.directive('accessibleForm', function () {
    return {
        restrict: 'A',
        link: function (scope, elem) {

            // set up event handler on the form element
            elem.on('submit', function () {

                console.log("inside focus directive");

                // find the first invalid element
                var firstInvalid = elem[0].querySelector('.ng-invalid');

                // If we got a label, then it is a radio-inline
                if(firstInvalid && firstInvalid.tagName === 'LABEL') {
                    firstInvalid =  elem[0].querySelector('.ng-invalid + div input[type=radio]')
                }

                firstInvalid && firstInvalid.focus();

            });
        }
    };
});

虽然这看起来是最简单的解决方案,但对我来说,让第二个查询选择器如此依赖于特定指令的结构似乎并不合适,就好像它改变了 accessibleForm 指令将再次被破坏。

关于angularjs - 专注于提交时 .ng-invalid 的第一个字段 - 不适用于 radios-inline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33904683/

相关文章:

javascript - 无法使用 Angular 模式表单指令渲染复选框

javascript - 如何使用 Angular 形式使用模糊事件?

AngularJS:未捕获错误:[$injector:modulerr] 无法实例化模块?

javascript - Protractor "by.css()"与 "$()"美元符号与 "$$()" 'Bling Bling'

angularjs - Angular.js 1.3 ng-bind 中的一次性绑定(bind)

javascript - AngularJS =?绑定(bind)不更新

javascript - Angular 模式形式模态.... $scope 的问题

javascript - Angular Schema 表单从 JSON 加载数据

javascript - 如何将 javascript 数组更改为 angular-schema-form 的 JSON 对象?

javascript - Swiper slider 不会为 slider 布局加载多个 View