Validação em formulários
A validação de formulários no Bootstrap é realizada por meio de pseudo-classes CSS, como :invalid
e :valid
, aplicadas a elementos <input>
, <select>
e <textarea>
. O Bootstrap direciona os estilos :invalid
e :valid
para a classe pai .was-validated
, geralmente aplicada ao <form>
.
Para personalizar as mensagens de erro e sucesso nos formulários do Bootstrap, você pode seguir os passos abaixo:
Adicione o atributo novalidate
ao formulário
Para desabilitar os feedback padrão do navegador e acessar as APIs de validação do formulário em JavaScript, adicione o atributo novalidate
ao formulário.
<form class="needs-validation" novalidate>
<!-- Formulário aqui -->
</form>
Crie elementos de feedback
Adicione elementos de feedback, como <div>
ou <p>
, com as classes .invalid-feedback
para mensagens de erro e .valid-feedback
para mensagens de sucesso.
<div class="invalid-feedback">
Por favor, preencha este campo corretamente.
</div>
<div class="valid-feedback">
Muito obrigado! Você preencheu este campo corretamente.
</div>
Intercepte o envio do formulário
Use JavaScript para interceptar o envio do formulário e fornecer feedback personalizado. Você pode usar a API de validação do formulário para verificar se os campos estão corretos e exibir as mensagens de erro ou sucesso correspondentes.
(function() {
'use strict';
window.addEventListener('load', function() {
var form = document.querySelector('.needs-validation');
form.addEventListener('submit', function(event) {
if (!form.checkValidity()) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
}, false);
});
})();
Adicione estilos personalizados
Você pode adicionar estilos personalizados aos elementos de feedback, como cor, tamanho e posição, para que sejam adequados à sua aplicação.
.invalid-feedback {
color: red;
font-size: 14px;
margin-top: 10px;
}
.valid-feedback {
color: green;
font-size: 14px;
margin-top: 10px;
}
Exemplo
<form class="row g-3 needs-validation" novalidate>
<div class="col-md-4">
<label for="validationCustom01" class="form-label">First name</label>
<input type="text" class="form-control" id="validationCustom01" value="Mark" required>
<div class="valid-feedback">
Looks good!
</div>
</div>
<div class="col-md-4">
<label for="validationCustom02" class="form-label">Last name</label>
<input type="text" class="form-control" id="validationCustom02" value="Otto" required>
<div class="valid-feedback">
Looks good!
</div>
</div>
<div class="col-md-4">
<label for="validationCustomUsername" class="form-label">Username</label>
<div class="input-group has-validation">
<span class="input-group-text" id="inputGroupPrepend">@</span>
<input type="text" class="form-control" id="validationCustomUsername" aria-describedby="inputGroupPrepend" required>
<div class="invalid-feedback">
Please choose a username.
</div>
</div>
</div>
<div class="col-md-6">
<label for="validationCustom03" class="form-label">City</label>
<input type="text" class="form-control" id="validationCustom03" required>
<div class="invalid-feedback">
Please provide a valid city.
</div>
</div>
<div class="col-md-3">
<label for="validationCustom04" class="form-label">State</label>
<select class="form-select" id="validationCustom04" required>
<option selected disabled value="">Choose...</option>
<option>...</option>
</select>
<div class="invalid-feedback">
Please select a valid state.
</div>
</div>
<div class="col-md-3">
<label for="validationCustom05" class="form-label">Zip</label>
<input type="text" class="form-control" id="validationCustom05" required>
<div class="invalid-feedback">
Please provide a valid zip.
</div>
</div>
<div class="col-12">
<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>
<div class="col-12">
<button class="btn btn-primary" type="submit">Submit form</button>
</div>
</form>