当前位置: 首页 > 面试题库 >

将重点放在AngularJs表单中的第一个无效输入上

章兴发
2023-03-14
问题内容

我已经阅读了几篇有关AngularJs的焦点设置的文章和StackOverflow问题。

不幸的是,我阅读的所有示例都假定我可以将一些属性添加到元素中以获得焦点,例如focusMe指令。

但是,如果我事先不知道将焦点设置为哪个输入怎么办?特别是如何将焦点设置为具有$ invalid集的表单中的第一个输入元素-即未通过验证的元素。可能有几个输入未通过验证,因此我不能使用仅以此为基础尝试调用.focus()的指令。(我这样做是出于可访问性/WCAG的原因,它的优良作法是在单击提交以最大程度地减少按键以查找未通过验证的字段时这样做)。

$ error对象将提供所有未通过验证的控件,但它们会按照失败的类型而不是在表单上出现的顺序进行分组。

我敢肯定,我可以想出一些行之有效的方法。表单上的伪指令,当需要设置焦点时会接收一些广播-该伪指令可以搜索第一个$invalid元素。但是,这似乎非常复杂,我想知道这些是否是更好的“角度”实现方式。


问题答案:

您也可以使用angular.element

angular.element('input.ng-invalid').first().focus();

视图

<form name="myForm" novalidate="novalidate" data-ng-submit="myAction(myForm.$valid)" autocomplete="off"></form>

控制者

$scope.myAction= function(isValid) {
    if (isValid) {
        //You can place your ajax call/http request here
    } else {
        angular.element('input.ng-invalid').first().focus();
    }
};

使用ngMessages进行验证

没有jQuery的方式

angular.element($document[0].querySelector('input.ng-invalid')).focus();

使用此方法时,需要$document在角度控制器中作为参数传递

angular.module('myModule')
.controller('myController', ['$document', '$scope', function($document, $scope){
    // Code Here
}]);


 类似资料:
  • 问题内容: 首先,我需要将ng- form设置为无效,因为它是向导的后续部分。表单包含带有元素的网格。每个元素都有其自己的验证,但是问题是,当没有元素时,表单将显示为有效。当行数为0时,我需要将其标记为对于开始情况无效。怎么做? 问题答案: 经过研究后,以下代码对我来说很好用。在控制器中: 超时确保我们可以访问该表单。它们不是在第一次通过控制器上构建的,因此需要超时或监视。然后,我们将表单标记为无

  • 我可以使用以下代码轻松地将数据绑定到div或pre标记: 但是,我想尝试将此数据绑定到隐藏表单输入,我尝试了: 这将返回以下错误: 所以很明显,在使用ng模型时,我不能使用| json。角度文档仍然有点稀疏,我似乎无法找到如何正确分配它,即使我可以?谢谢:) 我需要将这个json数据加载到我的金字塔应用程序中,并将其分配到一个隐藏的表单字段中,这似乎是最好的方法,或者我应该以另一种方式来做?

  • 我在Laravel 7中使用maatsite的Excel导入库将文件分析和支持数据导入到“分析”数据库表中,它工作得很好。但是,在我选择要导入的Excel文件的视图页面上,我有一个选择下拉和输入文本。我在各自的模型中创建了has很多和属性关系。 处理控制器: 利润进口: profiling_import.blade: 在Excel文件中: 视图: 问题是pemohon、品牌和用户数据没有填入数据库

  • 问题内容: 呈现组件后,将焦点设置在特定文本字段上的反应方式是什么? 文档似乎建议使用引用,例如: 在渲染函数中的输入字段上进行设置,然后调用: 但是我应该在哪里称呼它呢?我已经尝试了几个地方,但无法正常工作。 问题答案: 您应该这样做,而不是。像这样

  • 以下程序的目的是将4个字符的单词从转换为,我已经完成了让该列表和len工作的困难部分。 问题是程序逐行输出答案,我想知道是否有任何方法可以将输出存储回列表,并将其作为一个完整的句子打印出来? 谢谢