2014-08-27 75 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)