javascript - 点击似乎被模糊阻挡

标签 javascript angularjs angularjs-directive

我有使用绑定(bind)到模糊事件来处理验证的指令,如以下 plunkr 所示:

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

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

我将范围缩小到 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具有上述更新的代码。

关于javascript - 点击似乎被模糊阻挡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17237410/

相关文章:

javascript - 使用 AngularJS 将列添加到表中

javascript - 为什么我的对象的属性被覆盖?

angularjs - 如何在初始化后触发附加事件的 ngModel 验证

javascript - 排序后如何更新 AngularJS 数组?

javascript - IE10+ 上的 AngularJS,带有占位符的文本区域导致 "Invalid argument."

我页面上的 Javascript 在 iOS 中不工作

javascript - 提交按钮不工作 AngularJS

angularjs - AngularJS中同一个标签中有多个指令时属性属于哪个指令

javascript - 如何使用 ' 将字符串转换为标准字符

Javascript - 选择网格元素时显示 div