Angular JS不允许preventDefault或return false来处理表单提交

Tri*_*rip 29 javascript forms http-post angularjs

我有一个表格,我想通过AJAX提供:

<form class="form-inline ng-pristine" ng-submit="sendForm()" method="post" action="/sign_up" accept-charset="UTF-8">

$scope.sendForm = (e) ->
  e.preventDefault ->
  console.log 'sendForm()'
  return false  
Run Code Online (Sandbox Code Playgroud)

console.log出现,并立即将其传递的形式.

它忽略了e.preventDefault()return false.

AngularJS让我想起了蜜獾.它只是不在乎.

Mat*_*scu 52

我知道我参加派对已经很晚了,但是如果你还没弄清楚,你可以保留动作,并确保通过传递$event给该ng-submit功能实际上没有提交表格.然后,event.preventDefault();在完成所有处理后,您可以在控制器中使用.

所以在你的情况下它将是:

<form class="form-inline ng-pristine" ng-submit="sendForm($event)" method="post" action="/sign_up" accept-charset="UTF-8">

$scope.sendForm = (e) ->
  // doing stuff
  e.preventDefault()
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


Ben*_*esh 43

好吧,你不是"Angular方式".Angular提供了一个名为ng-submit的指令,它可以为您阻止默认(只要您没有在表单上指定action属性).

标记(通过验证!)

<form name="myForm" ng-submit="sendForm()">
  <div>
    <input type="text" name="name" ng-model="data.name" required/>
    <span ng-show="myForm.name.$error.required && myForm.name.$dirty">required</span>
  </div>
  <div>
    <input type="email" name="email" ng-model="data.email" required/>
    <span ng-show="myForm.name.$error.required && myForm.name.$dirty">required</span>
    <span ng-show="myForm.name.$error.email && myForm.name.$dirty">invalid email</span>
  </div>
  <button type="submit" ng-disabled="myForm.$invalid">Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)

app.controller("MyCtrl", function($scope, $http) {
    $scope.sendForm = function (){
       $http.post('/Submit/To/Url', $scope.data).success(function(data) {
           alert('done!');
       });
    };
});
Run Code Online (Sandbox Code Playgroud)

  • 从表单中取出action =""属性.如果指定了某个操作,则不会阻止默认. (12认同)
  • 肯定删除action属性对表单来说是非常糟糕的做法?Angular无法使用标准HTML表单,还是需要重写表单参数? (10认同)
  • 不,这不会阻止默认 (5认同)
  • 你也可以这样得到这样的事件:`<form ng-submit ="doThing($ event)">` (3认同)
  • 啊,就是这样.有点限制,但我会接受.谢谢Blesh! (2认同)
  • 如果你想让DOM远离你的控制器,你可以这样做:ng-submit ="$ event.preventDefault(); sendForm()".或者,您可以创建一个自定义指令,该指令将附加到表单的提交事件,preventDefaut并调用指定的方法. (2认同)

bio*_*all 5

您可以通过传递$event到 ng-click 或 ng-submit来获取事件。这就像依赖注入,除了在你的表达式中。

html

<form class="form-inline ng-pristine" ng-submit="sendForm($event)" method="post" action="/sign_up" accept-charset="UTF-8">
Run Code Online (Sandbox Code Playgroud)

咖啡脚本

$scope.sendForm = (e) ->
  e.preventDefault()
  console.log 'sendForm()'
  false  
Run Code Online (Sandbox Code Playgroud)