Loading...
Valid Feedback
Looks good!
Looks good!
@
Please choose a username.
Please provide a valid city.
Please provide a valid state.
Please provide a valid zip.
You must agree before submitting.
<form class="needs-validation" novalidate><div class="form-row"><div class="col-md-4 mb-3"><label for="validationCustom01">First name</label><input type="text" class="form-control" id="validationCustom01" placeholder="First name" value="Mark" required><div class="valid-feedback">Looks good!</div></div><div class="col-md-4 mb-3"><label for="validationCustom02">Last name</label><input type="text" class="form-control" id="validationCustom02" placeholder="Last name" value="Otto" required><div class="valid-feedback">Looks good!</div></div><div class="col-md-4 mb-3"><label for="validationCustomUsername">Username</label><div class="input-group"><div class="input-group-prepend"><span class="input-group-text" id="inputGroupPrepend">@</span></div><input type="text" class="form-control" id="validationCustomUsername" placeholder="Username" aria-describedby="inputGroupPrepend" required><div class="invalid-feedback">Please choose a username. </div></div></div></div><div class="form-row"><div class="col-md-6 mb-3"><label for="validationCustom03">City</label><input type="text" class="form-control" id="validationCustom03" placeholder="City" required><div class="invalid-feedback">Please provide a valid city. </div></div><div class="col-md-3 mb-3"><label for="validationCustom04">State</label><input type="text" class="form-control" id="validationCustom04" placeholder="State" required><div class="invalid-feedback">Please provide a valid state. </div></div><div class="col-md-3 mb-3"><label for="validationCustom05">Zip</label><input type="text" class="form-control" id="validationCustom05" placeholder="Zip" required><div class="invalid-feedback">Please provide a valid zip. </div></div></div><div class="form-group"><div class="form-check"><input class="form-check-input" type="checkbox" value="" id="invalidCheck" required><label class="form-check-label" for="invalidCheck">Agree to terms and conditions </label><div class="invalid-feedback">You must agree before submitting. </div></div></div><button class="btn btn-primary" type="submit">Submit form</button></form>
// Example starter JavaScript for disabling form submissions if there are invalid fields(function(){'use strict';window.addEventListener('load',function(){// Fetch all the forms we want to apply custom Bootstrap validation styles to var forms = document.getElementsByClassName('needs-validation');// Loop over them and prevent submission var validation = Array.prototype.filter.call(forms,function(form){form.addEventListener('submit',function(event){if(form.checkValidity() === false){event.preventDefault();event.stopPropagation()}form.classList.add('was-validated')},false)})},false)})();
Tooltip

If your form layout allows it,you can swap the .{valid|invalid}-feedbackclasses for .{valid|invalid}-tooltipclasses to display validation feedback in a styled tooltip. Be sure to have a parent with position:relativeon it for tooltip positioning. In the example below,our column classes have this already,but your project may require an alternative setup.

Looks good!
Looks good!
@
Please choose a unique and valid username.
Please provide a valid city.
Please provide a valid state.
Please provide a valid zip.
<form class="needs-validation" novalidate><div class="form-row"><div class="col-md-4 mb-3"><label for="validationTooltip01">First name</label><input type="text" class="form-control" id="validationTooltip01" placeholder="First name" value="Mark" required><div class="valid-tooltip">Looks good!</div></div><div class="col-md-4 mb-3"><label for="validationTooltip02">Last name</label><input type="text" class="form-control" id="validationTooltip02" placeholder="Last name" value="Otto" required><div class="valid-tooltip">Looks good!</div></div><div class="col-md-4 mb-3"><label for="validationTooltipUsername">Username</label><div class="input-group"><div class="input-group-prepend"><span class="input-group-text" id="validationTooltipUsernamePrepend">@</span></div><input type="text" class="form-control" id="validationTooltipUsername" placeholder="Username" aria-describedby="validationTooltipUsernamePrepend" required><div class="invalid-tooltip">Please choose a unique and valid username. </div></div></div></div><div class="form-row"><div class="col-md-6 mb-3"><label for="validationTooltip03">City</label><input type="text" class="form-control" id="validationTooltip03" placeholder="City" required><div class="invalid-tooltip">Please provide a valid city. </div></div><div class="col-md-3 mb-3"><label for="validationTooltip04">State</label><input type="text" class="form-control" id="validationTooltip04" placeholder="State" required><div class="invalid-tooltip">Please provide a valid state. </div></div><div class="col-md-3 mb-3"><label for="validationTooltip05">Zip</label><input type="text" class="form-control" id="validationTooltip05" placeholder="Zip" required><div class="invalid-tooltip">Please provide a valid zip. </div></div></div><button class="btn btn-primary" type="submit">Submit form</button></form>