Javascript 角度:$setPristine关于表单和复选框问题
我有一个表格不允许你在第一个条目上勾选复选框,这很奇怪。这几乎就像它没有注册点击 但是,如果您提交表单并在提交第一个表单后尝试选中相同的复选框,则允许您选中复选框。为什么会这样 这是我的复选框的外观:Javascript 角度:$setPristine关于表单和复选框问题,javascript,jquery,angularjs,forms,checkbox,Javascript,Jquery,Angularjs,Forms,Checkbox,我有一个表格不允许你在第一个条目上勾选复选框,这很奇怪。这几乎就像它没有注册点击 但是,如果您提交表单并在提交第一个表单后尝试选中相同的复选框,则允许您选中复选框。为什么会这样 这是我的复选框的外观: <label ng-repeat="sector in sectors" for="{{sector}}"> <input type="checkbox" id="{{sector}}" value="{{sector}}" ng-model="newService.sect
<label ng-repeat="sector in sectors" for="{{sector}}">
<input type="checkbox" id="{{sector}}" value="{{sector}}" ng-model="newService.sectors[sector]">{{sector}}
</label>
{{sector}}
我还试图研究如何在此表单上实现$setPristine
,以便在提交表单时为表单提供一个.ng pristine
类
我对Angular很陌生,正在慢慢地尝试理解这一切是如何运作的
我在这里摆好了小提琴:
感谢您的帮助。提前谢谢 问题 使用JSFIDLE示例,如果在单击复选框时查看控制台,您将看到错误: 无法设置未定义的属性“health” 这是因为未创建$scope.newService,您在选中复选框时尝试执行与
$scope.newService['health']=true
等效的操作。如您所见,$scope.newService未定义
解决方案
您应该添加对resetCreateForm
的调用,以初始化$scope.newService
属性
(查看最后一行,并附上注释)
编辑:
为了满足您使用$setPristine的需要,您可以查看以下内容
您所要做的就是在表单上添加
name
属性,并按其名称将其作为$scope属性调用。然后在表单属性上调用$setPristine()
。小提琴加载角度两次,一次从“框架和扩展”菜单加载,一次从“外部资源”加载。删除一个复选框,它就会工作。@NikosParaskevopoulos我已经删除了外部资源,但复选框仍然不工作。啊,我想让$scope.createService=createService
初始化resetCreateForm
,它就在里面。我错了吗?另外,您知道在重置此表单时,我将如何在此表单上使用$setPristine
?感谢您的帮助。$scope.createService=createService
只为$scope.createService
属性分配了对本地函数createService
的引用。它不会执行该函数,因此createService
内部的调用resetCreateForm()
不会发生。而且我不理解您关于$setPristine的问题,如果您可以重试的话,换言之。如果我没有正确解释,很抱歉。我正在尝试解决在提交此表单时如何$setPristine
。当我加载页面时,表单有一个.ng pristine
类,但一旦我选中复选框,该类将更改为.ng dirty
。我正在尝试解决如何使用$setPristine
将表单设置为原始状态。我希望这是有道理的。哦谢谢你描述得很好的回答。标记啊,这是有道理的。另外,我没有意识到可以调用{{$pristine}}
表达式来检查表单是否原始。谢谢你。非常有帮助。