Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何手动触发表单';让我们用AngularJS提交?_Javascript_Angularjs - Fatal编程技术网

Javascript 如何手动触发表单';让我们用AngularJS提交?

Javascript 如何手动触发表单';让我们用AngularJS提交?,javascript,angularjs,Javascript,Angularjs,我有一个我想要嵌套的表单,但这是不可能的,因为HTML不能接受嵌套表单。有没有办法在AngularJS的第一个表单上手动调用submit(触发验证,例如必需) 下面是代码的样子: <div ng-conroller="ContactController"> <form ng-submit="saveHeaderAndDetail()"> <label for="Description">Description</label>

我有一个我想要嵌套的表单,但这是不可能的,因为HTML不能接受嵌套表单。有没有办法在AngularJS的第一个表单上手动调用submit(触发验证,例如必需)

下面是代码的样子:

<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',[]);
函数MyCtrl($scope){
$scope.triggerSubmit=函数(){
$scope.$broadcast('myEvent');
console.log('broad');
};
$scope.onSubmitted=函数(){
警报(‘已提交’);
};
}
应用程序指令('submitOn',函数(){
返回{
链接:功能(范围、elm、属性){
作用域$on(attrs.submitOn,function(){
//我们无法立即触发submit,或者我们得到$digest已在进行中错误:-[(因为ng submit本身有一个$apply)
setTimeout(函数(){
elm.trigger(“提交”);
});
});
}
};
});

形式。。。

提交
您可以使用指令创建嵌套表单。它类似于:

<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表单。

我在这里回答了一个类似的问题

基本上,您可以通过触发
$validate
事件来触发验证

isFormValid = function($scope, ngForm) {
    $scope.$broadcast('$validate');
    if(! ngForm.$invalid) {
      return true;
}

有关工作代码示例&一种有助于显示验证消息的小实用程序方法,请参见上面链接中的答案。

我们始终可以使用提交按钮直接提交表单 ()来自javascript的函数

document.getElementById("myform").submit()

通过这种方式,我们可以先使用angularjs验证表单,如果表单有效,然后使用submit方法提交表单。

有一种更简单的方法,您可以为应用程序中的每个表单指定一个名称,然后您就可以发送要触发的表单的整个angular对象或执行任何您想要的操作信息技术。例如:

<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>

按钮上不属于表单的代码会触发提交,这对我来说很好,是一个新的学习,+1。但它不会触发表单上的验证。请看我的验证意思是什么?有没有一种方法可以不包含jquery?ng submit将“submit”事件绑定到一个元素。好吧,这应该附加到一个元素上在或输入[type=submit]或输入[type=button]DOM节点上,它不应该工作吗?如果您有一个带有ng submit的表单,一个带有手动ng click的表单,在其中调用
$scope.$broadcast('$validate');
saveHeaderAndDetail (myFirstForm) {
myFirstForm.$submitted = true
...
}