2013-10-28 202 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