Javascript 加载后立即生成无效表单
我有一个用AngularJS写的简单表格。 我想在加载后立即使表格无效。不幸的是,Javascript 加载后立即生成无效表单,javascript,angularjs,forms,validation,Javascript,Angularjs,Forms,Validation,我有一个用AngularJS写的简单表格。 我想在加载后立即使表格无效。不幸的是,$scope.myForm.$valid=false不想工作。你还有其他的技巧吗?这对我来说很重要,因为我只想让用户在选中“至少打开”复选框时单击按钮。现在,您可以在加载表单后始终提交表单 <form name="myForm" ng-submit="myForm.$valid"> <input type="checkbox" ng-model="obj.first" ng-change
$scope.myForm.$valid=false代码>不想工作。你还有其他的技巧吗?这对我来说很重要,因为我只想让用户在选中“至少打开”复选框时单击按钮。现在,您可以在加载表单后始终提交表单
<form name="myForm" ng-submit="myForm.$valid">
<input type="checkbox" ng-model="obj.first" ng-change="onChange()" /> First <br />
<input type="checkbox" ng-model="obj.second" ng-change="onChange()"/>Second <br />
<input type="checkbox" ng-model="obj.third" ng-change="onChange()"/> Third <br>
<button type="submit" ng-disabled="!myForm.$valid" ng-click="click()">test</button> <br>
</form>
$scope.myForm = {};
$scope.myForm.$valid = false;
$scope.click=function () {
console.log('-------------2', $scope.myForm);
};
$scope.onChange=function () {
console.log('before:', $scope.myForm);
var isValid = false;
angular.forEach($scope.obj, function(value, key) {
if(value == true){
isValid=true;
}
console.log(key + ': ' + value);
});
if(!isValid){
$scope.myForm.$valid = false;
$scope.myForm.$error.checkBoxes = {
isChecked: false
};
}
console.log('after:', $scope.myForm);
}
首先
第二个
第三个
测试
$scope.myForm={};
$scope.myForm.$valid=false;
$scope.click=函数(){
log('-----------2',$scope.myForm);
};
$scope.onChange=函数(){
log('before:',$scope.myForm);
var isValid=false;
angular.forEach($scope.obj,函数(值,键){
如果(值==true){
isValid=true;
}
console.log(键+':'+值);
});
如果(!isValid){
$scope.myForm.$valid=false;
$scope.myForm.$error.checkbox={
被检查:错误
};
}
log('after:',$scope.myForm);
}
这是我的最终解决方案,作用域中的表单有一个名为$setValidity()
的函数,我们可以在其中更改有效性状态并通知表单。请参阅,因此我检查是否有任何复选框的值为真,然后我单独将一个复选框的值设置为真,如果没有,则名称为one
的复选框之一设置为$valid=false
,因此整个表单将无效,请检查我的代码以实现解决方案
JS:
var app = angular.module('myApp', []);
app.controller('MyController', function MyController($scope) {
$scope.onChange = function() {
if ($scope.obj) {
if ($scope.obj.first || $scope.obj.second || $scope.obj.third) {
$scope.myForm.one.$setValidity("Atleast one checkbox needs to be selected", true);
} else {
$scope.myForm.one.$setValidity("Atleast one checkbox needs to be selected", false);
}
} else {
$scope.myForm.one.$setValidity("Atleast one checkbox needs to be selected", false);
}
}
});
在“提交”按钮中尝试此操作。希望它能起作用
data ng disabled=“myForm.$submitted | | myForm.$invalid&&!myForm.$pristine”尝试使用$invalid将起作用…尝试使用$invalid=true insted您想过为复选框组编写自定义验证器吗?我改为$scope.myForm.$invalid=true
还有Wokrin,您可以使用表单上的$toucted
或$dirty
属性来完成此操作吗?这是一个很好的解决方案,但是,根据我的案例,您将如何解决它-使用$valid/$invalid
?对于我来说,在valid/invalid
的表单中包含这些数据非常重要property@bielas现在,我更新了答案,实现了$valid
属性!请检查一下@比拉斯:消失是什么意思?你能在我给出的JSFIDLE中复制这个问题吗?我不能复制它。看起来是这样的:。每次我选中任何复选框时都是这样。并且无法单击该按钮-它始终处于禁用状态