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按照内置指令运行时包含日志记录。