我使用绑定到blur事件的指令来处理验证,如下图所示:
http://plnkr.co/edit/avEJ2xfLfz6ihM3DwLyB?p=preview (第一个字段的有效输入是电子邮件地址,第二个字段是'yes')
验证是有效的,但是为了触发allowValidation()函数,有时您必须单击submit按钮两次。
我将范围缩小到onblur和按钮之间的一些交互;假设你有一个onblur,即使在两个文本字段中的一个上仍在等待模糊,按钮只处理模糊而不是单击。
有没有办法让它处理点击而不是模糊呢?我也在click中调用验证。
发布于 2013-06-21 22:54:34
在我的试验中,我没有发现你的代码有任何问题。然而,如果你真的有这样一个场景,模糊和点击按钮似乎是冲突的,你可以有一个变量,它在有效性被触发时设置,在验证完成后重置。
基本上,在指令上的链接函数中,具有以下内容:
//Keeps track of the validation being active
var validationInProgress = false;
function dovalidation () {
validationInProgress = true;
//Validation code goes here
if (EMAIL_REGX.test(elm.val())) {
ctrl.$setValidity('emails', true);
} else {
ctrl.$setValidity('emails', false);
}
//Set this after validations are over
//Should be the last statement in this function
validationInProgress = false;
}完成此操作后,每次调用dovalidation()时,在调用之前检查是否已有验证正在进行-如果没有,则仅调用。
elm.bind('blur', function () {
if (!validationInProgress) {
scope.$apply(dovalidation);
}
});
scope.$on('kickOffValidations', function () {
if (!validationInProgress) {
dovalidation();
}
});编辑:具有上述更新的Plunkr代码。
https://stackoverflow.com/questions/17237410
复制相似问题