2014-02-18 64 views
9

我正嘗試使用angular-ui設置表單驗證。我想在提交之前檢查表單是否有效,所以我建立了一個ng-submit事件處理程序。即使未提交,AngularJS ng-submit事件處理程序也會被調用

但在實現任何驗證之前,我發現即使沒有提交表單,也會調用事件處理函數。

<div ng-app="app"> 
    <div ng-controller="ctrl"> 
     <form name="myForm" ng-submit="sub()" novalidate>      
      <div ng-repeat="item in items"> 
       <ng-form name="row"> 
        <input type="text" name="value" ng-model="item.value" required />      
       </ng-form> 
      </div>   
      <button ng-click="addItem()">Add Item</button>   
      <input type="submit" value="Submit"/> 
     </form> 
    </div> 
</div> 

和JS:

var app = angular.module('app', ['ng']); 

app.controller('ctrl', ['$scope', function($scope) { 
    $scope.items = []; 
    $scope.addItem = function() { 
     $scope.items.push({ value: $scope.items.length }); 
    }; 

    $scope.sub = function() { 
     alert("submitted?"); 
    }; 
    }]); 

見我的小提琴這裏:

http://jsfiddle.net/UvLBj/2/

這是應該在下面的例子中,當我點擊Add Item按鈕它被調用即將發生?對我來說似乎是錯誤的,ng-submit不只是在表單提交時被解僱......我做錯了什麼?

回答

21

相信你需要添加type =「button」以避免意外調用提交。更新了小提琴,似乎解決它:

http://jsfiddle.net/UvLBj/3/

<button type="button" ng-click="doSomething()">Test</button> 
+5

這是正確的。 「'沒有指定type屬性的button元素表示與type屬性設置爲」submit「的按鈕元素相同的東西''」 – Tom

+0

哦,親愛的,多麼尷尬!我一味地認爲問題出在Angular上。感謝您指出了這一點! –

+1

鏈接到@湯姆參考HTML規範http://www.w3.org/TR/html-markup/button.html。 – KhalilRavanna

相關問題