Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FormValidator.Tips and serial validation #33

Open
dci2112 opened this issue Jun 21, 2009 · 0 comments
Open

FormValidator.Tips and serial validation #33

dci2112 opened this issue Jun 21, 2009 · 0 comments

Comments

@dci2112
Copy link

dci2112 commented Jun 21, 2009

I noted something odd going on in the validateField method in the FormValidator.Tips class.

Test case: create a multi text field form. Introduce multiple validations on some of the fields, and have at least 2 that have no "required" validations. My example had the following 5 text field validations:

  • required validate-integer
  • required minLength:10
  • validate-url
  • validate-url
  • validate-url

I used all the default options on the instantiations of FormValidator.Tips and Fupdate.Prompt, specifying the minimum necessary arguments.

I noticed when I setup a Fupdate.Prompt with this form (after initializing the FormValidator.Tips ) that if I failed the first field (enter alpha chars) and the second field (enter too few chars) then corrected the first field I could post the form even though the second field still was invalid. Another behavior was that if I had a correct integer entry in field one, a too short entry in field 2, then clicked around in fields 3 through 5 I could make the error tip go away on field 2, and post.

I found the following changes to FormValidator.Tips in the validateField method solved this behavior...but it is likely not the most elegant. It also removed a JS error I saw in console from the msgs.getChildren().hide() line in this same method.

Here's my sloppy but working changes:


    validateField: function(field, force){
        
        var advice = this.getAdvice(field);
        var anyVis = this.advices.some(function(a){ return a.visible; });       
        if (anyVis && this.options.serial) {
            if (advice && advice.visible) {
                var passed = this.parent(field, force);
                if (!field.hasClass('validation-failed')) advice.hide(); 
            }
            return passed;
        }
        var msgs = field.retrieve('validationMsgs');
        if (msgs) {
            var msgChildren = msgs.getChildren();
            msgChildren.each(function (item,index) { item.hide(); });
            
        }
        if (field.hasClass('validation-failed') || field.hasClass('warning')) if (advice) advice.show();
            
        var passed = this.parent(field, force);

        if (this.options.serial && !passed) {
            var fields = this.element.getElements('.validation-failed, .warning');
            if (fields.length) {
                fields.each(function(f, i) {
                    var adv = this.getAdvice(f);
                    if (adv) adv.hide();
                }, this);
                passed = this.parent(field, force);
            }
        }

        return passed;
    },
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant