jQuery Validate with icons

by katalin_2003

HTML

<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.0/jquery.validate.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.0/additional-methods.js"></script>
<form id="loanRequestDetailsForm">
    <input type="text" name="field1" />
    <br/>
    <input type="text" class="pw" name="password" id="password" />
    <br/>
    <input type="text" class="pw" name="confirmpassword" />
    <br/>
    <input type="text" name="field2" />
    <br/>
    <input type="submit" />
</form>
<a id="docs" href="http://docs.jquery.com/Plugins/Validation" target="_blank">Validation Documentation</a>

CSS

#docs {
    display: block;
    position: fixed;
    bottom: 0;
    right: 0;
}
.passError {
    background:url("http://jquery.bassistance.de/validate/demo/images/unchecked.gif") no-repeat 0px 0px;
    padding-left: 16px;
}
.passValid {
    background:url("http://jquery.bassistance.de/validate/demo/images/checked.gif") no-repeat 0px 0px;
    padding-left: 16px;
}

JavaScript

$(document).ready(function() {

  jQuery.validator.addMethod('mypassword', function(value, element) {
    return this.optional(element) || (value.match(/[A-Z]/) && value.match(/[0-9]/));
  }, 'Password must contain at least one capital and one number.');

  $('#loanRequestDetailsForm').validate({ // initialize the plugin
    errorPlacement: function(error, element) {
      error.insertAfter(element);
      if (element.hasClass('pw')) {
        element.next().removeClass('passValid').addClass('passError');
      }
    },
    success: function(label) {
      if (label.prev().hasClass('pw')) {
        label.text("ok!");
      }
    },
    highlight: function(element, errorClass, validClass) {
      if ($(element).hasClass('pw')) {
        $(element).next().removeClass('passValid').addClass('passError');
      } else {
        $(element).addClass(errorClass).removeClass(validClass);
      }
    },
    unhighlight: function(element, errorClass, validClass) {
      if ($(element).hasClass('pw')) {
        $(element).next().removeClass('passError').addClass('passValid');
      } else {
        $(element).removeClass(errorClass).addClass(validClass);
      }
    },
    rules: {
      field1: {
        required: true,
        minlength: 5
      },
      password: {
        required: true,
        minlength: 7,
        mypassword: true
      },
      confirmpassword: {
        required: true,
        //minlength: 7, // <- redundant
        equalTo: "#password"
      },
      field2: {
        required: true,
        minlength: 5
      }
    },
    messages: {
      password: {
        required: "Please provide a password",
        minlength: "Your password must be at least {0} characters long"
      },
      confirmpassword: {
        required: "Please provide a password",
        equalTo: "Please enter the same password as above"
      }
    },
    submitHandler: function(form) { // for demo
      alert('valid form submitted'); // for demo
      return false; // for demo
...