将焦点设置到 AngularJS 中的第一个无效表单元素

2024-01-28

基本上,我想要完成的任务是在尝试提交表单后将焦点设置到第一个无效元素。此时,我的元素被标记为无效,并且我可以获得$name元素的名称,这样我就知道它是哪一个。

它正在“工作”,但正在抛出“$apply 已在进行中”错误......
所以我一定在这里做错了什么:)

到目前为止,这是我的代码:

$scope.submit = function () {

    if ($scope.formName.$valid) {
        // Good job.
    }
    else 
    {
        var field = null,
            firstError = null;
        for (field in $scope.formName) {
            if (field[0] != '$')
            {
                if (firstError === null && !$scope.formName[field].$valid) {
                    firstError = $scope.formName[field].$name;
                }

                if ($scope.formName[field].$pristine) {
                    $scope.formName[field].$dirty = true;
                }
            }
        }

        formName[firstError].focus();
    }
}

我的字段循环基于这个解决方案 https://stackoverflow.com/questions/18324773/force-ng-dirty-in-angularjs-form-validation,我已经读过这个问题 https://stackoverflow.com/questions/14833326/how-to-set-focus-in-angularjs几次。它seems就像首选的解决方案是创建一个指令一样,但是向每个表单元素添加一个指令似乎有点矫枉过正。

有没有更好的方法通过指令来解决这个问题?


指令代码:

app.directive('ngFocus', function ($timeout, $log) {
return {
    restrict: 'A',
    link: function (scope, elem, attr) {

        scope.$on('focusOn', function (e, name) {
            // The timeout lets the digest / DOM cycle run before attempting to set focus
            $timeout(function () {
                if (name === attr.ngFocusId) {
                    if (attr.ngFocusMethod === "click")
                        angular.element(elem[0]).click();
                    else
                        angular.element(elem[0]).focus();
                }
            });
        })
    }
}
});

在控制器中使用的工厂:

app.factory('focus', function ($rootScope, $timeout) {
    return function (name) {
        $timeout(function () {
            $rootScope.$broadcast('focusOn', name);
        }, 0, false);
    };
});

控制器示例:

angular.module('test', []).controller('myCtrl', ['focus', function(focus) {
  focus('myElement');
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将焦点设置到 AngularJS 中的第一个无效表单元素 的相关文章

  • 使用 ng-options 在 AngularJS 中使用 JSON 填充 select

    编辑 我的代码实际上确实有效 我只是一个有不相关问题的白痴 感谢大家的意见 所以我有一个 JSON 对象数组 格式如下 id id1 text text1 id id2 text text2 我想使用这些填充 AngularJS 选择字段
  • 在脚本标签内工作的角度表达式

    如何在脚本标签内使用角度表达式 我对此很陌生并且需要帮助 这是我的 java 脚本代码的示例
  • AngularJS - 将文本格式从 JSON 返回到标题大小写

    我有一个从 JSON 文件检索数据的服务 数据内有些数据全部为大写 例如 scope FootballClubs CompanyName MANCHESTER UNITED LIVERPOOL FOOTBALL CLUB CHELSEA W
  • 如何使用 htaccess 将所有请求重定向到反应或角度索引?

    我正在使用react router 在react 中创建一个应用程序 早些时候 我对 Angular 做了同样的事情 但在这两种情况下 如果用户为 URL 添加书签并直接加载它 它将显示 404 错误 我们可以在 htaccess 中创建这
  • PHPExcel下载文件

    我想下载使用 PHPExcel 生成的 Excel 文件 我按照以下代码PHPExcel 强制下载问题 https stackoverflow com questions 26265108 phpexcel force download i
  • Javascript DOM setAttribute 在函数调用中不起作用

    我有一个带有输入元素的 HTML 文件 我希望向其中添加一个名为 valid fieldset011 的新属性 该属性用作 AngularJS 验证器的链接 输入元素具有属性 id fieldset011 如果我使用以下脚本 包含在脚本标签
  • $compile 不编译 Karma/Jasmine 中的模板

    我已经用 PhantomJS 和 Chrome 对此进行了测试 下列的这个问题 https stackoverflow com questions 27026596 accessing compiled template in unit t
  • AngularJS - 获取已定义路由的列表 - $routeProvider

    我正在尝试实施named routes 所以我不必写整个路径 经常改变 我想我可以编写一个服务来返回定义的路由列表和一个将对象转换为路由的过滤器 使用示例如下所示 a Click here a 假设我已将 name detail 添加到我的
  • 使用 jasmine 在 angularJS 中注入服务来测试控制器

    我想了解如何使用 jasmine 和 angularJS 测试我的代码 我编写了一个带有控制器和注入服务的测试项目 现在我想测试控制器并尝试模拟注入的服务 但我没有找到一种方法来测试我的控制器的 到达 功能 这是我的jsfiddle htt
  • Angular 模态对话框最佳实践

    与不具有动态内容的对话框相比 创建具有动态内容的模式对话框的最佳实践是什么 例如 我们有一些模式表单接受表单元素列表 并具有提交 取消功能 此外 还有一些模式对话框仅显示确认 确定类型的操作 我见过很多人说对话框应该是传递到控制器的服务 但
  • 如何更改 Angular ui Bootstrap 日期选择器弹出窗口的大小?

    这就是我所指的 http angular ui github io bootstrap http angular ui github io bootstrap 我没有看到任何指示如何控制大小的内容 我尝试更改正文字体 但没有成功 可以通过覆
  • Angular ui.router,从子控制器调用父控制器函数?

    我将 Angular 与 ui router 一起使用 并设置了嵌套视图 父视图有一个 div 我可以通过父控制器上的函数切换其可见性 我想从嵌套视图的子控制器调用此函数 我该怎么做 http plnkr co edit zw5WJVhr7
  • 使用 ng-table 角度计算列的总和

    我正在使用 Angular ng table 以表格形式绘制数值数据 我无法弄清楚如何在表末尾引入一行 该行显示每列所有值的总和 我可以在服务器端计算数据并将其呈现在用户界面中 但有没有办法在 ng table ng grid 中实现这一点
  • 没有找到 angular.min.js.map,这到底是什么?

    When I load the page and check chrome console i find these errors Angular 中的地图文件到底是什么 我确实引用了 Angular min js 但没有引用 Angula
  • 使用命名的成功/错误回调在 AngularJS 中声明一个 Promise

    我正在尝试做一些与 http 服务非常相似的事情 根据我的理解 http 返回一个 Promise 对象 使用它时 语法是 http success function data success callback error function
  • Angular-Chart.js 它不显示图表

    我正在尝试使用 Angular chart js 它没有为我显示任何内容 这是我的 javascript 和 html 页面 function angular module app chart js controller BarCtrl f
  • 如何获取 ng-repeat 中的前一项?

    我有一个模板 仅当当前项目与前一个项目有一些不同的字段时 我才想生成一些 HTML 如何访问 ng repeat 中的前一项 你可以做类似的事情 div ul li div class title index content title c
  • AngularJS:遍历嵌套数组

    我正在使用具有以下结构的嵌套数组 scope items attr1 val1 attr2 val2 items attr1 val1 attr2 val2 items 这进入一个ng repeat with ng include像这样 d
  • 如何理解 Angular JS 中的控制台错误消息?有什么工具吗?

    我是 Angular JS 的新手 我的第一个问题是如何理解 Angular JS 中控制台的错误消息 我编写了这段用于匹配密码的代码片段 它在控制台上抛出错误 但它工作正常 它是有线的 我无法从这些控制台消息中理解任何内容 谁能指出我为什
  • Restangular - _.contains() 不是一个函数

    如果您最近通过 Bower 更新了 Restangular 它将安装最新的 Lodash 新的 4 0 然而 这是一个问题 因为 Restangular Angular 现在会抛出错误 contains 不是函数 你怎么解决 解决方案非常简

随机推荐

  • 如何获取快速 .Net Http 请求

    我需要一个可以在 Net 中使用的 Http 请求 该请求需要不到 100 毫秒 我能够在浏览器中实现这一点 所以我真的不明白为什么这在代码中是一个问题 我尝试过 WinHTTP 以及 WebRequest Create 它们都超过 500
  • Sails.js API Passport.js 身份验证

    我正在尝试在 Sails js 中开发 API 后端 我需要的最基本的事情是身份验证 就这样 我发现了sails generate auth生成器 我已按照以下列出的所有步骤进行操作帆生成验证 https github com kasper
  • 如何使用 g++ (Ubuntu) 编译 OpenAL 程序?

    我正在尝试找到一种让 OpenAL 在我的计算机上运行的方法 Ubuntu 12 10 running on 2010 intel i7 Macbook Pro 我从终端安装了 OpenAL 库 sudo apt get install l
  • 可视化将网络划分为社区的结果

    The dataset is included the network matrix and attribute data frame Network dataset has 3 data set itself that I just wa
  • 使用 free() 时“检测到堆损坏”

    我对 C 还很陌生 这实际上是我第一次使用指针进行作业 我无法弄清楚这个错误 这是我的代码 void str rv char c int i len str ln c char rev char calloc len sizeof char
  • sql server 中的行号,如 USER_SOURCE oracle 中的 LINE

    我试图找出更改一些存储过程代码的影响 在甲骨文中我曾经这样做过 select NAME TEXT LINE from USER SOURCE where upper TEXT like SEARCH STRING 在sql server中我
  • 动态图表生成/将对象从 JSF 1.2 传递到 Servlet

    我正在尝试使用 JFreeChart 库动态生成图表并将其显示给前端的用户 我的项目使用 JSF 1 2 作为其视图技术 我们正在尝试确定一种策略来显示BufferedImage 到目前为止 最好的选择似乎是使用 servlet 生成图表并
  • 如何检查emu8086中CF标志是否为1?

    我试图找出 CARRY 标志是否为 1 但我不知道如何检查它 我编写了下面的代码 但我需要一些帮助来处理我输入的问号 LEA DX MSG MOV AH 09H INT 21H MOV AH 01H INT 21H MOV NUM AL S
  • 在 php 中引用常量:“这是 MY_CONSTANT”

    我想在 PHP 中使用常量 但我也想将它像变量一样放在双引号内 这是可能吗 define TESTER World echo Hello TESTER 显然输出 你好 测试者 但我真正想要的是这样的 tester World echo He
  • SQL 动态透视 - 如何对列进行排序

    我正在对包含以下内容的表进行动态数据透视查询 OID 订单ID 尺寸 产品的尺寸 BucketNum 大小的顺序 应该去 数量 订购了多少 大小列包含不同的大小 具体取决于 OID 因此 使用找到的代码here http www sqlpr
  • AppDomain.Unload 不会释放我用反射加载的程序集[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 AppDomain Unload domain 之后删除插件程序集 https stackoverflow com questions 425077 how to delete the plu
  • 将 Ajax 数据获取到 Angular 网格中

    使用 Angular Grid 我在 console log 中获取 ajax 数据 但是一个空的网格 控制台日志显示 13 56 11 411 now 13 56 11 412 13 56 11 412 now 13 56 11 556
  • Maven 原型未出现在 m2eclipse Nexus 索引器中

    我正在 Eclipse 中设置一个用于 Java 开发的新工作站 在我以前的机器上 我不记得必须做任何特殊的事情才能看到 下的标准原型集合New gt Other gt Maven project gt select archetype 选
  • 如何修改Tkinter中的默认字体?

    我正在使用 Tkinter 在 Python2 7 中开发 GUI 但遇到了一个烦人的问题 我想定义所有小部件使用的默认字体 如果可能的话在一行中 此行仅修改 Entry 或 ComboBox 中使用的字体 root option add
  • Boost::GIL:读取具有 alpha 通道的 *.png 图像缺少抗锯齿功能

    我用的是boost 1 74 因此 毫无例外地捕获并休息我的实际代码如下所示 typedef std vector
  • 是否可以在 Google Apps 脚本中迭代 ENUM?

    我想在 Google Docs 的 Google Apps 脚本中获取所有可用的字体系列 FontFamilies 定义为 FontFamily ENUM 我可以迭代此 ENUM 以获取此文档中所有可能的 FontFamilies 吗 更新
  • 将默认值添加到 Laravel 表单中的选择列表::select

    简单的问题 我希望如此 我需要向我的选择列表 请选择 添加默认值 并将其设置为禁用
  • 装箱与拆箱

    我最近遇到的另一个 C 面试问题是我是否知道装箱和拆箱是什么 我解释过值类型位于堆栈上 引用类型位于堆上 当一个值被转换为引用类型时 我们称之为装箱 反之亦然 然后他让我计算一下 int i 20 object j i j 50 What
  • 从我自己的服务器分发 Android 应用程序

    我开发了一个安卓应用程序 我只想从我自己的服务器分发它 我不想把它放在谷歌播放上 是否可以 如果是的话 我该怎么办 Steps 配置MIME类型在 Web 服务器上apk as 应用程序 vnd android package archiv
  • 将焦点设置到 AngularJS 中的第一个无效表单元素

    基本上 我想要完成的任务是在尝试提交表单后将焦点设置到第一个无效元素 此时 我的元素被标记为无效 并且我可以获得 name元素的名称 这样我就知道它是哪一个 它正在 工作 但正在抛出 apply 已在进行中 错误 所以我一定在这里做错了什么