2013-10-28 277 views
10

我想阻止 - 如果在填寫表單時電子郵件爲空,http-post的默認操作爲'/ signUp'。防止默認提交: - Angularjs

控制器代碼: -

$scope.signUp = function() { 

    if($scope.email = null); 
    preventdefault; 

} 

HTML(玉): -

form(name="input", action="/signUp", method="post") 
    input(type="submit", value="submit") 
+0

加上'NG-禁用= 「!email」輸入。或者更好的是,適當地實施表單驗證。 –

回答

18

當你有一個表單指定action屬性,angularjs不會做的preventDefault。 如果你刪除它,並添加代替NG-提交:

<form name="myForm" method="post" ng-submit="signUp(myForm)" novalidate> 
    <input type="email" name="email" ng-model="newSignup.email" required> 
    <button type="submit">sign up</button> 
</form> 

在這種情況下,形式總是會有的preventDefault並提交您的$ scope.signUp()函數將被調用,您可以用AJAX後進行到後端/註冊或進一步驗證。 請注意,通過在輸入上使用適當的驗證屬性(如type =「email」和required),angularjs將爲您執行一些基本驗證。 您可以在提交按鈕上額外添加ng-disabled="!myForm.$valid",以防止在未正確輸入電子郵件時禁用按鈕。

通過使用像在我的例子中,輸入NG-模型,你的範圍會得到一個$scope.newSignup對象,你可以在你的註冊檢查進一步驗證()函數:

$scope.signUp = function(htmlForm) { 
    if ($scope.newSignup.email !== '[email protected]') { 
     return false; // you should really show some info to the user 
    } 
    ... 
} 
+6

即使javascript被禁用,如果我需要表單才能工作,該怎麼辦?然後我需要動作屬性,否則表單不會提交。我將如何防止角(在這種情況下明顯啓用JavaScript)從提交? – berliner

+1

啊,從這裏https://groups.google.com/forum/#!topic/angular/pqoaPaLdhR4取得它。註冊我自己的提交處理程序將做到這一點。 – berliner