Javascript 单击似乎被模糊阻止

Javascript 单击似乎被模糊阻止,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我有一些指令使用绑定到blur事件来处理验证,如图所示: (第一个字段的有效输入为电子邮件地址,第二个字段为“是”) 验证工作正常,但为了触发allowValidation()函数,有时必须单击submit按钮两次 我把范围缩小到onblur和按钮之间的一些交互;假设您的两个文本字段中有一个仍然等待模糊的onblur,则按钮仅处理模糊,而不处理单击 有没有一种方法可以让它处理点击而不是模糊?我也在点击中调用验证。在我的试验中,我没有发现您的代码有任何问题。但是,如果确实存在模糊和单击按钮似乎冲突

我有一些指令使用绑定到blur事件来处理验证,如图所示:

(第一个字段的有效输入为电子邮件地址,第二个字段为“是”)

验证工作正常,但为了触发allowValidation()函数,有时必须单击submit按钮两次

我把范围缩小到onblur和按钮之间的一些交互;假设您的两个文本字段中有一个仍然等待模糊的onblur,则按钮仅处理模糊,而不处理单击


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

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

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

//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,它似乎不起作用,但显然我没有正确保存它,现在我无法重现这个问题。我们将在周一再看一次,谢谢你迄今为止的帮助。