Pad*_*ann 5 javascript validation angularjs
我有一个带有用于添加人员的表单的 Angular 页面,以及一个用于提交人员列表的按钮(在此表单之外)。
当用户关注表单中的文本输入,然后单击提交列表时,会出现文本输入的验证错误,但从未发生提交事件。
这里问题的一个例子:http : //plnkr.co/edit/6Z0UUs
<div ng-controller="MyCtrl as vm">
<form name="form1" novalidate="">
<input type="text" name="field1" ng-model="vm.name" required>
<div ng-messages="form1.field1.$error" ng-if="form1.field1.$touched">
<label ng-message="required">Name is required</label>
</div>
<!--
This form adds a person to a list. I've not included this code to keep the example simple
<input type="submit" value="Add person">
-->
</form>
<button ng-click="vm.submit()">Submit list</button>
</div>
Run Code Online (Sandbox Code Playgroud)
——
angular.module('myApp',[])
.controller('MyCtrl', function() {
var vm = this;
vm.name = '';
vm.submit = function () {
alert('submitted');
};
});
Run Code Online (Sandbox Code Playgroud)
复制:
当前行为:由于验证,出现“需要名称”。再次单击“提交”会显示“已提交”警报。
预期行为:由于验证和“已提交”警报出现,出现“需要名称” 。
期望的行为:出现“已提交”警报,我向 vm.submit() 添加了一些代码以隐藏“需要名称”验证消息,因为在提交列表时这并不重要。
我观察到删除ng-messages块可以解决问题,但我确实需要显示验证消息。使用更基本的指令 ( ng-show) 来显示验证消息无济于事。
任何对我做错了什么的见解,或实现我想要的行为的解决方法,都会很棒!
[修改后的答案]:这是一个工作插件:http://plnkr.co/edit/JCyRi8xp4L3FtafABblS ?p=preview
vm.preventDefaultIfSubmitted = function($event){
if($event.relatedTarget.id == "submit"){
$event.stopImmediatePropagation();
}
};
Run Code Online (Sandbox Code Playgroud)
这个想法是在模糊发生时获取 $event,然后查看 relatedTarget 的 id(在本例中是您的按钮),如果是,则取消 $event,否则保留它。
这样,如果您单击任何地方,您的验证消息就会出现,而如果您单击提交,则不会出现
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |