编辑:
我添加了一个 JsFiddle,因此您可以轻松排除故障,而不必自己设置环境。如您所见,甚至在元素上的blur
事件之前就已在电子邮件字段上完成验证,该事件是由被更改触发的。如果您注释掉元素上的,您会发现问题没有发生。input
$scope.Email
ng-show="!mainForm.validate()"
<p>
我正在使用jQuery Validate 的 Angular 实现,并且我需要能够在不显示错误消息的情况下检查表单是否有效。我在网上看到的标准解决方案是使用jQuery Validate的checkForm()
函数,像这样:
$('#myform').validate().checkForm()
但是,我正在使用的 Angular 包装器目前没有实现该checkForm
功能。我一直在尝试修改源代码以将其引入,我担心我的头绪。代码小而简单,我将其粘贴在这里:
(function (angular, $) {
angular.module('ngValidate', [])
.directive('ngValidate', function () {
return {
require: 'form',
restrict: 'A',
scope: {
ngValidate: '='
},
link: function (scope, element, attrs, form) {
var validator = element.validate(scope.ngValidate);
form.validate = function (options) {
var oldSettings = validator.settings;
validator.settings = $.extend(true, {}, validator.settings, options);
var valid = validator.form();
validator.settings = oldSettings; // Reset to old settings
return valid;
};
form.numberOfInvalids = function () {
return validator.numberOfInvalids();
};
//This is the part I've tried adding in.
//It runs, but still shows error messages when executed.
//form.checkForm = function() {
// return validator.checkForm();
//}
}
};
})
.provider('$validator', function () {
$.validator.setDefaults({
onsubmit: false // to prevent validating twice
});
return {
setDefaults: $.validator.setDefaults,
addMethod: $.validator.addMethod,
setDefaultMessages: function (messages) {
angular.extend($.validator.messages, messages);
},
format: $.validator.format,
$get: function () {
return {};
}
};
});
}(angular, jQuery));
我希望能够使用它来显示或隐藏消息,如下所示:
<p class="alert alert-danger" ng-show="!mainForm.checkForm()">Please correct any errors above before saving.</p>
我不只是使用的原因!mainForm.validate()
是因为这会导致错误消息在元素“模糊”远离之前显示在元素上,这是我试图避免的。谁能帮我在checkForm()
这个角度指令中实现这个功能?