AngularJS 1.3-为什么表单在加载时有效,适用于长度最小的输入
AngularJS 1.3 - why is the form valid on load, for inputs with a minimum length?
我刚开始使用AngularJS,如果表单有任何无效字段,我希望禁用表单的提交按钮。
我有一个名为"标题"的字段。它要求最小长度为5。加载表单时,AngularJS提供的表单对象报告$invalid: false
<div ng-controller="NewPinCtrl as newPin">
<form role="form" name="formNewPin">
<div>
<label>Title</label>
<input ng-model="newPin.pin.title" ng-minlength="5" ng-maxlength="140" type="text" name="title" value="" placeholder="Title" />
<ul ng-messages="formNewPin.title.$error" ng-if="formNewPin.title.$dirty">
<li ng-message="required">This is required</li>
<li ng-message="minlength">Should be longer than 5 characters</li>
<li ng-message="maxlength">Should be shorter than 140 characters</li>
</ul>
</div>
</form>
</div>
这是我的按钮:
<button ng-click="newPin.savePin()" ng-disabled="formNewPin.$pristine || formNewPin.$invalid" type="button">Submit</button>
好吧,我想,如果表单是$pristine: true
,我就禁用按钮。这解决了我的"负载"问题。。。但是当用户清除字段并返回空白时,$invalid
报告为false
。
当字段显然有最小长度要求时,为什么会出现这种情况?而且,我如何在不单独检查每个表单字段错误的情况下绕过它?
谢谢!
EDIT:我可以补充一点,我正在为1.3 使用这个新的ngMessages
您已经提供了所需错误的消息,但尚未将输入标记为所需。这就是为什么它在第一次加载时被评估为有效的原因。
添加必需的属性后,您将不需要对ng消息使用ng-if。最终的解决方案应该是这样的:
<form name="formNewPin">
<label>Title</label>
<input ng-model="newPin.pin.title" required ng-minlength="5" ng-maxlength="140" type="text" name="title" value="" placeholder="Title">
<ul ng-messages="formNewPin.title.$error">
<li ng-message="required">This is required</li>
<li ng-message="minlength">Should be longer than 5 characters</li>
<li ng-message="maxlength">Should be shorter than 140 characters</li>
</ul>
<button ng-click="newPin.savePin()" ng-disabled="formNewPin.$invalid" type="button">Submit</button>
</form>
普朗克。
相关文章:
- AddEventListener适用于浏览器,但不适用于Android
- 查找仅适用于原始图像的图像放大算法的名称
- 如何在category.php中执行jquery,这应该适用于类别wordpress中的每个帖子
- Web编程,简单但适用于机器人项目
- JavaScript不适用于internet explorer和Firefox,但适用于谷歌
- Jquery事件处理程序仅适用于匿名函数
- jQuery调整大小函数只适用于窗口
- 火灾在卸载前确认警报仅适用于外部站点
- EmberJS-适用于各种模型的适配器动态名称空间
- Facebook共享链接适用于用户,但不适用于粉丝页面管理员
- jQuery-适用于移动设备的多级菜单
- 循环中的切换脚本只适用于第一次迭代
- 为什么setTimeout适用于无休止的递归调用
- 我未保存的更改指令需要适用于具有不同名称的所有表单
- jQuery表单验证(如果==“执行此操作”)仅适用于第一次输入
- 在backbonejs视图中,keypress/keyup/keydown事件是否仅适用于输入,而不适用于其他元素
- AngularJS 1.3-为什么表单在加载时有效,适用于长度最小的输入
- Jquery - info/docs关于适用于表单中不同类型输入元素的属性列表
- 按钮只适用于点击,而不是输入/返回
- 验证输入的时间只适用于如果我附加了一个断点在chrome调试器