Angularjs 角度不验证表单选择
我是新手,所以请容忍我。我有一个带有Angularjs 角度不验证表单选择,angularjs,html,validation,select,Angularjs,Html,Validation,Select,我是新手,所以请容忍我。我有一个带有下拉列表,文本框和按钮的表单。用户必须从dropbox中选择一个选项,并在文本框中输入一个值,表单才会生效 <form name='personDataSourceForm' novalidate ng-submit='personDataSourceForm.$valid && PersonCtrl.SaveDataItem()'> <span>Invalid: {{personDataSourceForm.$
下拉列表
,文本框
和按钮的表单。用户必须从dropbox中选择一个选项,并在文本框中输入一个值,表单才会生效
<form name='personDataSourceForm' novalidate ng-submit='personDataSourceForm.$valid && PersonCtrl.SaveDataItem()'>
<span>Invalid: {{personDataSourceForm.$invalid}}</span><br />
<span>valid: {{personDataSourceForm.$valid}}</span>
<div class="input-group">
<div class="input-group-addon">
<select class="form-control input-sm" required ng-model='PersonCtrl.sp.person.newItem.dataType' ng-options='opt as opt.text group by opt.dataType for opt in PersonCtrl.DataItemTypes'>
<option value="" disabled selected>Choose...</option>
</select>
</div>
<input type="text" class="form-control input-sm" ng-model='PersonCtrl.sp.person.newItem.value' required>
<div class="input-group-btn">
<button class="btn btn-default btn-sm" ng-class="{ 'btn-success' : PersonCtrl.sp.person.newItem.dataType.dataType && PersonCtrl.sp.person.newItem.value }" type="submit">Save</button>
<button class="btn btn-link btn-sm" type="button" ng-click="PersonCtrl.StopAddItem()">Cancel</button></div>
</div>
</form>
无效:{{personDataSourceForm.$Invalid}}
有效:{{personDataSourceForm.$valid}}
选择。。。
拯救
取消
我很快添加了两个跨度来显示验证状态。当两者都为空时,表单显示无效
,这很有意义
一旦我在文本框中输入了一个值,那么表单就会突然生效,即使下拉列表仍然没有更改。
为什么我的下拉列表未得到验证?我甚至尝试过这个解决方案我最初的想法是您已经选择了默认值:
<option value="" selected>Choose...</option>
选择。。。
因此,从技术上讲,它的值为“”,满足了要求 我想你需要看看PersonCtrl.sp.person.newItem
。当数据类型
和值
都变为实数时,该表单生效。我的猜测是,该项始终具有其数据类型且有效,因此当输入新值时,整个表单将变为有效。为什么您的选择adinput
不具有name
属性?name
属性是表单验证正常工作所必需的。
我认为,form
为每个输入组件创建了一个name->validity
的映射,可能是您忽略了它,它们都(select
和input
)映射到同一个validity对象。如果是这种情况,那么任何人都有效,有效地使另一人的状态也有效,因此他们都有效,表单也有效。
请为它们添加单独的名称,并查看问题是否得到解决。我上面的观点是一个很强的猜测,我没有深入到角度代码来检查ng form
的行为。更新我发布到测试中的代码,但这不起作用,因为我无法重现您的问题。你能在小提琴中重现同样的问题并分享吗?编辑:当我将selected
更改为ng selected=“selected”
时,问题似乎得到了解决。仍然试图理解为什么..ng selected=“selected”就像从选项中删除selected一样,因为变量selected
将被解析为false
,如果您不在范围内。谢谢。我还是在想这件事。因此,如果我想确保用户选择的不是第一个默认选项,那么我可以将ng selected
保留在那里,如果没有选择任何选项,它应该始终返回false?只要您的选项的值为=“如果用户选择该选项,您的表单应该无效。所以最好像选择…
那样使用它。我甚至用name属性也试过了,但它不起作用,我也弄不明白。最终起作用的是使用ng select