When using either
callback,
promise or
remote validator validator, your validation logic might take time. For instance, the
remote validator connects to the server side and executes a few of database queries to check whether or not the field is valid. These kind of process could force the user to wait for a busy processing.
User even don't have idea about what is happening. This example displays a progress bar when the validation is being processed. It enhances the user experience of the application.
<div class="form-group row">
<label class="col-sm-3 col-form-label">Username</label>
<div class="col-sm-6">
<input type="text" class="form-control" name="username" autocomplete="off" />
<div class="progress mt-2" id="progressBar" style="opacity: 0;">
<div class="progress-bar progress-bar-striped progress-bar-animate" style="width: 100%"></div>
</div>
</div>
</div>
Next, display the progress bar when the field is being validated. Also, gide it when the validation is done.
FormValidation
.formValidation(
document.getElementById('demoForm'),
{
fields: {
username: {
validators: {
notEmpty: {
message: 'The username is required'
},
remote: {
message: 'The username is already taken',
method: 'GET',
url: '...',
},
}
},
...
},
plugins: {
...
},
}
)
.on('core.validator.validating', function(e) {
if (e.field === 'username' && e.validator === 'remote') {
document.getElementById('progressBar').style.opacity = '1';
}
})
.on('core.validator.validated', function(e) {
if (e.field === 'username' && e.validator === 'remote') {
document.getElementById('progressBar').style.opacity = '0';
}
});
For testing purpose, the demo always answers that the username is already taken no matter what you input.