formJS
/Demos
Show Error Messages via JS
HTML
<form action="../json/data.json" name="my-form">
<div data-formjs-question class="form-group">
<div class="answers-box label-move-up">
<input name="name" type="text" data-length="[3,20]" class="form-control" required />
<label>Name</label>
</div>
<div class="field-error-message small"></div>
</div>
<div data-formjs-question class="form-group">
<div class="answers-box label-move-up">
<input name="surname" type="text" data-length="[3,20]" class="form-control" data-validate-if-filled />
<label>Surname</label>
</div>
<div class="field-error-message small"></div>
</div>
<div data-formjs-question class="form-group">
<div class="answers-box label-move-up">
<input name="email" type="email" class="form-control" required />
<label>Email</label>
</div>
<div class="field-error-message small"></div>
</div>
<div data-formjs-question class="form-group">
<p class="mb-2 small">Select your contact preferences <br />( 2 answers max )</p>
<div class="answers-box">
<div class="form-check">
<input name="contactPrefCheck" type="checkbox" value="sms" class="form-check-input" id="checkbox-1-a" required data-checks="[1,2]" />
<label class="form-check-label" for="checkbox-1-a">SMS</label>
</div>
<div class="form-check">
<input name="contactPrefCheck" type="checkbox" value="email" class="form-check-input" id="checkbox-2-a" required />
<label class="form-check-label" for="checkbox-2-a">Email</label>
</div>
<div class="form-check">
<input name="contactPrefCheck" type="checkbox" value="app-notiifcation" class="form-check-input" id="checkbox-3-a" required />
<label class="form-check-label" for="checkbox-3-a">App Notification</label>
</div>
</div>
<div class="field-error-message small"></div>
</div>
<div data-formjs-question class="form-group">
<div class="answers-box">
<div class="small">
I agree with the <a href="#" target="_blank">Privacy Policy</a>.
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="privacyCheck" id="privacyCheck-1-a" value="accepted" required />
<label class="form-check-label" for="privacyCheck-1-a">Yes</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="privacyCheck" id="privacyCheck-2-a" value="" required />
<label class="form-check-label" for="privacyCheck-2-a">No</label>
</div>
</div>
<div class="field-error-message small"></div>
</div>
<div class="text-center">
<button type="submit" class="btn btn-light">SEND</button>
</div>
<div class="d-none alert mt-5 mb-4" role="alert" data-formjs-global-feedback></div>
</form>
JS
function onValidationDemoErrorsJs ( obj, options ){
const isValid = obj.result,
$field = obj.$field,
$container = $field.closest('[data-formjs-question]');
if( $container !== null && !options.fieldOptions.skipUIfeedback ){
if( isValid ){
// REMOVE ERRORS FROM PAGE
$container.querySelector('.field-error-message').innerHTML = '';
} else {
// PRINT ERRORS AS FOR obj.errors
if( obj.errors ){
let errorsHTML = '';
if( obj.errors.empty ){
errorsHTML += '<p>This field cannot be empty</p>';
} else {
for(let errorName in obj.errors){
if( errorName !== 'rule' ){
const printError = errorName.replace(/([A-Z])/g, function(all, letter){
return ' ' + letter.toLowerCase();
});
errorsHTML += '<li>Error: '+ printError +'</li>';
}
}
errorsHTML = 'This field is not valid:<ul>' + errorsHTML + '</ul>';
}
$container.querySelector('.field-error-message').innerHTML = errorsHTML;
}
}
}
}
const $form = document.querySelector('form');
$form.addEventListener('fjs.field:validation', function(event){
onValidationDemoErrorsJs( event.detail, this.formjs.options );
});
const formInstance = new Form( $form );