【发布时间】:2015-06-18 16:07:31
【问题描述】:
我有一个在每个表单字段更改后更新的功能。但是,对于单选按钮,在我更改单选按钮两次或更改不同字段之前,表单状态无效。更重要的是,当我控制台记录表单对象时,我可以看到无线电组确实有效。
HTML
<div ng-controller="formController">
<form name="testForm" novalidate>
<input type="text" name="name" placeholder="Name" ng-model="name" required ng-change="updateForm(testForm)">
<ng-form name="radioGroup">
<input type="radio" name="radioGroup1" required="!sex" ng-model="sex" value="male" ng-change="updateForm(testForm)"/> Male
<input type="radio" name="radioGroup2" required="!sex" ng-model="sex" value="female" ng-change="updateForm(testForm)"/> Female
</ng-form>
</form>
<div ng-show="testForm.$dirty">
Form Dirty
</div>
<div ng-show="isFormDirty">
From Dirty from controller
</div>
<div ng-show="testForm.$valid">
Form Valid
</div>
<div ng-show="isFormValid">
From Valid from controller
</div>
</div>
还有 Javascript
angular.module('app',[]).controller('formController', function($scope) {
$scope.hello = 'hello from controller';
$scope.name = null;
$scope.sex = null;
$scope.isFormDirty = null;
$scope.isFormValid = null;
$scope.updateForm = function(form) {
if(form.name.$dirty || form.radioGroup.$dirty) {
$scope.isFormDirty = true;
}
if(form.name.$valid && form.radioGroup.$valid) {
$scope.isFormValid = true;
}
}
});
我还创建了一个 plunker here,所以你可以看到我在说什么。对此问题的任何见解都会有很大帮助。
【问题讨论】:
-
必填属性为布尔属性,不能使用
required="!sex"。删除它也可以解决您的有效性问题。 -
删除 required="!sex" 并将其替换为 required 并不能解决问题。重新创建我遇到的问题的步骤是:在文本框中输入一些文本。表单现在很脏,控制器可以看到。然后在收音机中输入一个选项。表单是有效的,但是控制器没有看到。更改单选选项或更新文本框将再次更新表单,以便控制器可以看到其有效。看看 this plunk 和更新的 required 属性。
-
看起来像单选按钮绑定的问题看看这里stackoverflow.com/questions/15778739/…
标签: javascript angularjs forms validation