angularjs - ng-submit,删除表单,以及 "Form submission canceled because the form is not connected"

标签 angularjs forms

我正在使用 Angular 1,并尝试在使用 ng-click 或 ng-submit 提交表单时设置变量。然后该变量级联并使用 ng-if 从 DOM 中删除表单。但是,我遇到了 chrome 错误消息“表单提交已取消,因为表单未连接”,并且表单未发布。

这是完整的 MWE:

<html>
  <head>
    <title>Something</title>
  </head>
  <body>
    <div ng-app="myApp" ng-controller="myCtrl">
      <div ng-if="status.value=='ok'">
        <form action="url" method="post" target="_blank">
          <button type="submit" ng-click="status.value='newwindow'">Open in new window</button>
        </form>
      </div>
      <div>{{status}}</div>
    </div>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
    <script>
      var app = angular.module('myApp', []);
      var ctrl = app.controller('myCtrl', ['$scope', function($scope) {
        $scope.status = {'value':'ok'};
      }]);
    </script>
  </body>
</html>

每当我完全删除 ng-* 属性时,表单都会正常提交,但变量不会更新。

关于如何将表单保留足够长的时间以便发布,有什么建议吗?

最佳答案

此处代码中的问题是 ng-if 语句。当您单击该按钮时,status.value立即更新,从而导致 $digest 循环。 $digest 循环导致 ng-iffalse,从而删除整个 div(包括表单) 来自 DOM。

一个可能的修复方法是使用 ng-show 而不是 ng-if,它只是隐藏元素,但不会删除来自 DOM。

另一种可能性是将 ng-click 附加到处理所有表单提交逻辑的函数,甚至可能使用 event.preventDefault() 抑制默认提交.

关于angularjs - ng-submit,删除表单,以及 "Form submission canceled because the form is not connected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46086394/

相关文章:

javascript - ng-repeat 中的 Angularjs 指令不更新外部 Controller 数据

javascript - 将表单和按钮链接到 javascript 命令

javascript - 根据从 <select> 元素中选择的选项禁用不同的输入

HTML 图例元素未计算在表单中

html - CSS Form下划线文本域动画效果

javascript - 将数据从 HTML 表单发送到 Google 表单

angularjs - 如何创建具有多个选项的动态单选按钮

javascript - 如何为可编辑日期设置正确的日期格式

angularjs - 如何在angularjs onclick中订购项目

angularjs - 路由更改后销毁 Angular $http 成功/错误片段