Clear error on Knockout-Validation
Asked Answered
A

5

17

I have a page setup with Knockout.js and using Knockout-Validation.

During the page load I put another plugin on a select box which fires a change, which fires the validation. I need to be able to clear that error using JS so I can start with a fresh looking UI and give feedback on the form post or select box change.

I can't find anything that allows me to clear an error in Knockout-Validation.

Assiduous answered 5/12, 2012 at 14:26 Comment(0)
P
31

Probably a better way that follows what is already implemented in knockout validation is to say property.isModified(false);

if you have a whole view model to reset simply loop through all the validated properties and call that isModified(false)

See the comment from Eric Barnard here

Hope that helps

Psychomotor answered 24/1, 2013 at 21:51 Comment(2)
Thanks. Also, this may be obvious to others but you have to do it after you clear the field. Example : _thisComment(''); _this.Comment.isModified(false). Easy validation reset.Kerwinn
this is exactly what showAllMessages(false) does internally, as answered by @yoannTarahtaran
K
25

Late answer but if anyone needs it :

// assuming the ko.observable on the checkbox is called propBoolean
var propBooleanlValid = ko.validation.group(self.propBoolean, { deep: false });
propBooleanlValid .showAllMessages(false);

It will hide the message till the next validation.

Kosiur answered 6/6, 2013 at 4:46 Comment(3)
This works great, thank you! This should be in the ko validation docs.Bigley
note: make sure you have messagesOnModified: true in your configuration. if it's false then the message will show alwaysTarahtaran
i feel this is the best of threeAppling
A
4

Found the answer by implementing this Pull Request.

https://github.com/Knockout-Contrib/Knockout-Validation/pull/184

Gives me the feature I need.

Assiduous answered 5/12, 2012 at 16:20 Comment(1)
Not to offend but I feel like this answer is not the one people should be taking as action when they want this functionality. whence my downvote. I upvoted your question though, its a good one! :)Psychomotor
T
1

One way to solve it is by using a custom validator where you check for a flag in your viewmodel like "ignoreValidation". If that flag is true, then you let the validator pass.

Example of how that validator would look like:

viewmodel.userHasPremiumMembership.extend({
    validation: [
        {
            validator: function () {
                if (viewmodel.ignoreValidation) {
                    return true;
                }

                return viewmodel.userHasPremiumMembership();
            },
            message: 'User needs to have premium membership.'
        }
    ]
});
Tarbes answered 1/12, 2020 at 13:22 Comment(0)
A
0

If you use an entity manager make sure to not include the entityAspect in the validation since it is connected to all other entities. Also see How to rollback knockout validation errors?

Adage answered 14/7, 2016 at 11:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.