Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 加载后立即生成无效表单_Javascript_Angularjs_Forms_Validation - Fatal编程技术网

Javascript 加载后立即生成无效表单

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

我有一个用AngularJS写的简单表格。 我想在加载后立即使表格无效。不幸的是,
$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中复制这个问题吗?我不能复制它。看起来是这样的:。每次我选中任何复选框时都是这样。并且无法单击该按钮-它始终处于禁用状态