基本上,我想要完成的是在尝试提交表单后将焦点设置到第一个无效元素。此时,我将元素标记为无效,并且我可以获取$name
元素的,因此我知道它是哪一个。
它正在“工作”,但正在抛出“$apply already in progress”错误......
所以我一定在这里做错了:)
到目前为止,这是我的代码:
$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();
}
}
我的字段循环是基于这个解决方案的,我已经读过这个问题几次。似乎首选的解决方案是创建一个指令,但是向每个表单元素添加一个指令似乎有点过头了。
有没有更好的方法来处理这个指令?