I know the question is quite old, but to help other people get a better answer, I would advise you guys not to use invalidHandler, but showErrors.
This is because invalidHandler will only be called when the form is submitted. ShowErrors is called every time the field is updated.
So do the following:
Script at the end of the page
$("form").validate({ rules: { name: { required: true } }, messages: { name: { required: "required" } }, highlight: function (element) { $(element).closest('.form-group').removeClass('has-success').addClass('has-error') $(element).parent().find('.form-control-feedback').removeClass('glyphicon-ok').addClass('glyphicon-remove'); }, unhighlight: function (element) { $(element).closest('.form-group').removeClass('has-error').addClass('has-success'); $(element).parent().find('.form-control-feedback').removeClass('glyphicon-remove').addClass('glyphicon-ok'); }, errorElement: 'span', errorClass: 'help-block', errorPlacement: function (error, element) { if (element.parent('.input-group').length) { error.insertAfter(element.parent()); } else { error.insertAfter(element); } }, showErrors: function (errorMap, errorList) { var errors = this.numberOfInvalids(); if (errors) { var message = errors == 1 ? 'Your form has 1 error' : 'Your form has ' + errors + ' errors.'; message = message + ' Please, fix then.' $("#error span").empty().html(message); $("#error").show(); } else { $("#error").hide(); } this.defaultShowErrors(); }, });
Do not forget your html tag
<div id="error"><span></span></div>
source share