1

我有使用绑定到模糊事件来处理验证的指令,如在此 plunkr 上所见:

http://plnkr.co/edit/avEJ2xfLfz6ihM3DwLyB?p=preview(第一个字段的有效输入是电子邮件地址,第二个字段是“是”)

验证有效,但为了触发 allowValidation() 函数,有时您必须单击提交按钮两次。

我将其缩小到 onblur 和按钮之间的一些交互;大概如果你有一个 onblur 即使在两个文本字段之一仍然等待模糊按钮只处理模糊而不是点击。

有没有办法让它处理点击而不是模糊?我也在点击中调用验证。

4

1 回答 1

0

在我的试验中,我没有发现您的代码有任何问题。但是,如果您确实遇到模糊和单击按钮似乎发生冲突的情况,您可以设置一个在触发有效性时设置的变量,并在验证完成后重置。

基本上,在指令上的链接函数中,具有以下内容:

//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代码。

于 2013-06-21T14:54:33.563 回答