2014-08-27 96 views
2

我需要表单上onsubmit属性的功能 - 即当我称这个onsubmit函数时,它必须返回truthy以便表单发布。不过,我想利用角度函数调用来做到这一点,沿着线:对于表单的角度提交

<form id="form-submit-canvas" autocomplete="on" enctype="multipart/form-data" accept-charset="UTF-8" method="POST" onsubmit="{{FormSubmit.validate()}}" action="{{FormSubmit.SUBMIT_URL}}" novalidate> 

但是上面给出了关于插值误差在onsubmit被使用。我试过放入ng-submit,因为我设置的action属性被覆盖,所以它不起作用。

+0

你看过文档吗?这是一个很好的开始:https://docs.angularjs.org/api/ng/directive/ngSubmit – catalyst294 2014-08-27 16:28:37

+0

是的,我有。 “此外,它还可以防止默认操作(对于表单意味着将请求发送到服务器并重新加载当前页面),但只有当表单不包含'action' ...”时。所以这似乎并不是解决方案。 – Zambezi 2014-08-27 18:52:32

回答

6

不知道它对你是否仍然有效,但正如我一直在解决类似的问题。

以下的答案必须把我带到了正确的轨道:https://stackoverflow.com/a/17769240/1581069

所以,总结一下所需要的步骤:

  1. 你应该叫纯JavaScript(角免一)在onsubmit,像(请注意:如果您返回false有=>的形式不会所需提交):

    <form id="form-submit-canvas" ... name="fooForm" onsubmit="return externalValidate();" ... 
    
  2. 和实施方法手工OV呃到角,如:

    function externalValidate(){ 
        return angular.element($("#form-submit-canvas")).scope().validate(); 
    } 
    
    • 在您validate()方法应该是只有一个你提到以前(在你的角度控制器实现)。
    • externalValidate()应该在任何角度特定的组件之外实现。
  3. 而且确保确保从validate()方法返回正确的结果(防止表单提交)。也许是这样的:

    $scope.validate = function() { 
        // TODO implement whatever magic you need prior to submission 
    
        return $scope.fooForm.$valid; 
    } 
    
1

尝试使用ng-submit属性,而不是onsubmit。相关建议:Angular不支持许多属性。您应该找到您想用来让Angular正确回应它们的属性的ng-等价物。

例子:

<form id="form-submit-canvas" autocomplete="on" enctype="multipart/form-data" accept-charset="UTF-8" method="POST" ng-submit="validate()" novalidate> 
    ... 
    <input type="submit" name="submit" value="Submit" /> 
</form> 

ng-submitvalidate()方法是在你的$scope声明的方法。

这里是一个相关的教程:AngularJS Tutorial (ng-submit)