Javascript 在表格中取消提交表格

Javascript 在表格中取消提交表格,javascript,angularjs,forms,Javascript,Angularjs,Forms,我需要一个既能$dirty又能不$submitted的表单,以便我的验证工作 我试图通过CSS实现这一点,它使用.nginvalid、.ngdirty和.ngsubmitted类,这些类通过angular动态添加。这意味着我不能简单地将表单上的$submitted设置为false,因为这不会删除关联的类。我也不能使用$setPristine或$setUntouched,因为这将删除$dirty标志及其类 是否有某种方法将表单设置为未提交,以便删除.ng submitted类,并且表单保持脏状态?

我需要一个既能
$dirty
又能不
$submitted
的表单,以便我的验证工作

我试图通过CSS实现这一点,它使用
.nginvalid
.ngdirty
.ngsubmitted
类,这些类通过angular动态添加。这意味着我不能简单地将表单上的
$submitted
设置为false,因为这不会删除关联的类。我也不能使用
$setPristine
$setUntouched
,因为这将删除
$dirty
标志及其类


是否有某种方法将表单设置为未提交,以便删除
.ng submitted
类,并且表单保持脏状态?

您可以使用
$setPristine
后跟
$setDirty
。如果要保留
$dirty
值,请在将其设置为pristine之前将其保存

var formWasDirty = form.$dirty;

form.$setPristine(); 

if (formWasDirty) { 
  form.$setDirty();
}

不幸的是,
$setUnsubmitted
在Angular中起作用

但是,
$setSubmitted
函数的操作非常简单。您可以轻松地利用form指令上的装饰器来提供此功能

angular.module('YourModule').directive('form', function() {
    return {
        require: 'form',
        link: function(scope, element, attrs, form) {
            form.$setUnsubmitted = function() {
                element.removeClass('ng-submitted');
                form.$submitted = false;
                if (form.$$parentForm.$setUnsubmitted) { // may be nullFormCtrl
                    form.$$parentForm.$setUnsubmitted();
                }
            };
        }
    };
});
如果Angular团队将来选择IncludeThis方法,您只需删除此装饰器,而不需要更改其他代码


您可以使用
$setPristine
然后再使用
$setDirty
伟大的解决方案!谢谢。普朗克:请记住,这将丢弃单个表单控件上的脏状态。很好,我唯一担心的是,它在命名时模仿了本机的角度行为。如果angular的某个版本在存在
$setUnsubmitted
的地方被更新(这是不可能的),这将覆盖该版本,从而可能造成混乱。我会考虑重命名它,甚至可以添加一个子句,该条目记录该方法现在存在的消息,并删除该脚本。如果Angular团队要引入这种方法,那么命名之类的东西是为了避免任何重大重构。只需删除此自定义装饰器,就不需要在整个代码中进行其他更改。我希望任何开发人员在升级之前都会检查对库的更改,但是如果您担心忘记,您可以始终保留名称,并在decorator按照内置指令运行时包含日志记录。