【问题标题】:Click seems to be blocked by blur点击似乎被模糊阻挡
【发布时间】:2013-06-22 02:21:46
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: javascript angularjs angularjs-directive


    【解决方案1】:

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

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

    //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 上述更新的代码。

    【讨论】:

    • 不知道发生了什么;我有一个不同的 plunkr,它似乎不起作用,但显然我没有正确保存它,并且我现在无法重现该问题。星期一将不得不再次查看它,感谢您迄今为止的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2012-02-19
    相关资源
    最近更新 更多