[英]How to manually trigger a form's submit in AngularJS?
我有一个我希望嵌套的表单,但由于HTML无法接受嵌套表单,因此无法实现。 有没有办法可以在AngularJS的第一个表单上手动调用提交(触发验证,例如需要)?
这是代码的样子:
<div ng-conroller="ContactController">
<form ng-submit="saveHeaderAndDetail()">
<label for="Description">Description</label>
<input type="text" ng-model="Description" required/>
<input type="text" style="visibility:hidden" />
</form>
<form ng-submit="addToDetail()">
...
</form>
<input type="button"
ng-click="what code could trigger the first form's submit?"/>
</div>
顺便说一下,如果有帮助,两种形式都在一个控制器下
尝试创建捕获事件的指令:
var app = angular.module('myApp', []); function MyCtrl($scope) { $scope.triggerSubmit = function() { $scope.$broadcast('myEvent'); console.log('broad'); }; $scope.onSubmitted = function() { alert('submitted!'); }; } app.directive('submitOn', function() { return { link: function(scope, elm, attrs) { scope.$on(attrs.submitOn, function() { //We can't trigger submit immediately, or we get $digest already in progress error :-[ (because ng-submit does an $apply of its own) setTimeout(function() { elm.trigger('submit'); }); }); } }; });
<link href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css" rel="stylesheet"/> <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script> <script src="http://code.angularjs.org/1.0.0/angular-1.0.0.js"></script> <div ng-controller="MyCtrl"> <form submit-on="myEvent" ng-submit="onSubmitted()"> Form... </form> <hr /> <a class="btn" ng-click="triggerSubmit()">Submit</a> </div>
原始来源:
http://jsfiddle.net/unWF3/
我在这里回答了一个类似的问题AngularJS - 如何以嵌套的形式触发提交
基本上,您可以通过触发$validate
事件来触发验证
isFormValid = function($scope, ngForm) {
$scope.$broadcast('$validate');
if(! ngForm.$invalid) {
return true;
}
有关工作代码示例和有助于显示验证消息的小实用程序方法,请参阅上面链接中的答案。
您可以使用ng-form指令嵌套表单。 它会像:
<form name="accountForm">
<div data-ng-form="detailsForm">
<input required name="name" data-ng-model="name">
</div>
<div data-ng-form="contactsForm">
<input required name="address" data-ng-model="address">
</div>
<button type="submit">Save</button>
</form>
这样,当accountForm
触发submit
时,它也将验证嵌套的ng-forms。
有一种更简单的方法,您可以为您的应用程序中的每个表单命名,然后您将能够发送您想要触发的表单的整个角度对象或用它做任何你想做的事情。 例:
<div ng-conroller="ContactController">
<form name="myFirstForm" ng-submit="saveHeaderAndDetail()">
<label for="Description">Description</label>
<input type="text" ng-model="Description" required/>
<input type="text" style="visibility:hidden" />
</form>
<form name="mySecondForm" ng-submit="addToDetail()">
...
</form>
<input type="button"
ng-click="saveHeaderAndDetail(myFirstForm)"/>
</div>
然后在你的功能
saveHeaderAndDetail (myFirstForm) {
myFirstForm.$submitted = true
...
}
我们总是可以使用javascript中的submit()函数直接提交表单。
document.getElementById("myform").submit()
通过这种方式,我们可以首先使用angularjs验证表单,如果表单有效,则使用submit方法提交。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.