So what’s up with third-party form validation libraries? Why would you use a library for something you can get for free?
You need deeper browser support.
All “modern” browsers + IE 9 down is pretty good, especially when you’ve accounted for cross-browser differences nicely as Chris did. But it’s not inconcievable that you need to go even deeper.
Libraries like Parsley go down a smidge further, to IE 8.
When you’re working with a framework like React, you aren’t really attaching event handlers or inserting anything into the DOM manually at all. You might be passing values to a form element via props and setting error data in state.
You can absolutely do all that with native form validation and native constraint validation, but it also makes sense why you might reach for an add-on designed for that. You might reach for a package like react-validation that helps out in that world. Or Formik, which looks to be built just for this kind of thing:
Likewise, there is:
angular-form-validation or angular-validation for Angular
ember-form-validation for Ember
vee-validate for Vue
The hope is that these libraries are nice and lightweight because the take advantage of the native API’s when they can. I’ll leave that to you to look into when you need to reach for this kind of thing.
You’re compelled by the API.
One of the major reasons any framework enjoys success is because of API nicety. If it makes your code easy to understand and work on, that’s a big deal.
You’re compelled by the integrations.
They promised you it “Works with Bootstrap!” and your project uses Bootstrap, so that seemed like a good fit. I get it, but this is my least favorite reason. In this context, the only thing Bootstrap would care about is a handful of class names and where you stick the divs.
It validates more than the browser offers.
The browser can validate if an email address is technically valid, but not if it bounces or not. The browser can validate if a zip code looks like a real zip code, but not if it actually exists or not. The browser can validate if a URL is a proper URL, but not if it resolves or not. A third-party lib could potentially do stuff like this.
You’re compelled by fancy features.
Perhaps the library offers a feature where when there is an error, it scrolls the form to that first error.
Perhaps the library offers a captcha feature, which is a related concept to form validation, and you need it.
Perhaps the library offers an event system that you like. It publishes events when certain things happen on the form, and that’s useful to you.
Perhaps the library not only validates the form, but creates a summary of all the errors to show the user.
These things are a little above and beyond straight up form validation. You could do all of this with native validation, but I could see how this would drive appoption of a third-party library.
You need translation.
Native browser validation messages (the default kind that come with the HTML attributes) are in the language that browser is in. So the French version of Firefox spits out messages in French, despite the language of the page itself:
Third-party form validation libraries can ship with language packs that help with this. FormValidation is an example.
I’m not recommending a form validation library. In fact, if anything, the opposite.
I imagine that third-party form validation libraries are going to fall away a bit as browser support and UX gets better and better for the native APIs.
Or (and I imagine many already do this), internally they start using native APIs more and more, then offer nice features on top of the validation itself.