--- layout: docs title: Validation description: Provide valuable, actionable feedback to your users with HTML5 form validation, via browser default behaviors or custom styles and JavaScript. group: forms toc: true --- ## How it works Here's how form validation works with Bootstrap: - HTML form validation is applied via CSS's two pseudo-classes, `:invalid` and `:valid`. It applies to ``, `
Please enter a message in the textarea.
Example invalid feedback text
More example invalid feedback text
Example invalid select feedback
Example invalid form file feedback
{{< /example >}} ## Tooltips If your form layout allows it, you can swap the `.{valid|invalid}-feedback` classes for `.{valid|invalid}-tooltip` classes to display validation feedback in a styled tooltip. Be sure to have a parent with `position: relative` on it for tooltip positioning. In the example below, our column classes have this already, but your project may require an alternative setup. {{< example >}}
@
{{< /example >}} ## Sass ### Variables {{< scss-docs name="form-feedback-variables" file="scss/_variables.scss" >}} ### Mixins Two mixins are combined together, through our [loop](#loop), to generate our form validation feedback styles. {{< scss-docs name="form-validation-mixins" file="scss/mixins/_forms.scss" >}} ### Map This is the validation Sass map from `_variables.scss`. Override or extend this to generate different or additional states. {{< scss-docs name="form-validation-states" file="scss/_variables.scss" >}} Maps of `$form-validation-states` can contain three optional parameters to override tooltips and focus styles. ### Loop Used to iterate over `$form-validation-states` map values to generate our validation styles. Any modifications to the above Sass map will be reflected in your compiled CSS via this loop. {{< scss-docs name="form-validation-states-loop" file="scss/forms/_validation.scss" >}} ### Customizing Validation states can be customized via Sass with the `$form-validation-states` map. Located in our `_variables.scss` file, this Sass map is how we generate the default `valid`/`invalid` validation states. Included is a nested map for customizing each state's color, icon, tooltip color, and focus shadow. While no other states are supported by browsers, those using custom styles can easily add more complex form feedback. ## Usage ### Via data attributes To easily add form validation behavior to you form, add `data-bs-toggle="form"` attribute to the `
` element. ### Via JavaScript Enable manually with: ```js const formElementList = document.querySelectorAll('form') const formList = [...formElementList].map(formEl => new bootstrap.Form(formEl)) ``` ### Options #### Form {{< bs-table "table" >}} | Name | Type | Default | Description | | --- | --- | --- | --- | | `type` | string | `feedback` | You may pick the kind of feedback. Acceptable values `tooltip` or `feedback` | | `validateCallback` | function, null | `null` | A callback to execute while trying to check for errors. Can be use for ajax submissions/validations. | {{< /bs-table >}} #### Field {{< bs-table "table" >}} | Name | Type | Default | Description | | --- | --- | --- | --- | | `invalid` | string | `''` | invalid message to append | | `valid` | string | `''` | valid message to append | {{< /bs-table >}} ### Methods You can create a form instance using the constructor, for example: ```js const bsForm = new bootstrap.Form('#myForm', { type: 'tooltip' }) ``` #### Form {{< bs-table "table" >}} | Method | Description | | --- | --- | | `getInstance` | *Static* method which allows you to get the form instance associated with a DOM element. | | `getOrCreateInstance` | *Static* method which allows you to get the form instance associated with a DOM element, or create a new one in case it wasn't initialized. | | `getElement` | Returns the DOM element of the instance. | | `getFields` | Returns all form-fields instances of the form. Array\. | | `getField('name')` | Searches and return the requested FormField instance or undefined. | | `clear` | Clears all the form validation results. | | `validate` | Activates validation process. | {{< /bs-table >}} #### Field {{< bs-table "table" >}} | Method | Description | | --- | --- | | `getInstance` | *Static* method which allows you to get the form Field instance associated with a DOM element | | `getOrCreateInstance` | *Static* method which allows you to get the form Field instance associated with a DOM element, or create a new one in case it wasn't initialized | | `getElement` | Returns the DOM element of the instance. | | `clearAppended` | Clears any appended messages from field. | | `appendError(message)` | Appends the given message as an error feedback. In case we do not provide a message, it fallbacks to the configuration given `invalid` message. | | `appendSuccess(message)` | Appends the given message as a success feedback. In case we do not provide a message, it fallbacks to the configuration given `valid` message. | | `appendFeedback(message)` | Appends the given message as a simple info feedback. | | `name` | returns the name (fallback to id) of the field as unique identifier between form elements. | {{< /bs-table >}}