jquery ketchup-plugin for Client-side form-validation:
There are many jquery plugins available for client-side form validation (to validate form before actually submitting it). jquery ketchup-plugin is one of them.
Github: https://github.com/mustardamus/ketchup-plugin
Demo: http://demos.usejquery.com/ketchup-plugin/
Validations provided by plugin:
https://github.com/mustardamus/ketchup-plugin/blob/master/jquery.ketchup.validations.js
Steps:
- include css file in your application.css file
*= require jquery.ketchup
- include js file in your application.js file
//= require jquery.ketchup.all.min
- Form:
= simple_form_for(@user, :html => {:class => 'ket-validation'}) do |f| = f.input :first_name, input_html: { class: "required_field "} = f.input :email, input_html: { class: "validate_email" }
- initialization on js file: use the class of form and input fields as follows
$(".ket-validation").ketchup({},{ '.required_field' : 'required', '.validate_email' : 'email' });
Additional Info:
- To hide all errors
$(".ketchup-error").hide();
- To explicitly call validations on any form on any event
$("#form_id”).ketchup();
Add your own custom-validation:
You can add your own custom validation for any input field:
Following is example of US zip-code validation:
function isValidZip(zip) { var pattern = new RegExp(/^\d{5}(-\d{4})?$/); return pattern.test(zip); } $.ketchup.validation('zip_code', 'Must be a valid Zip Code!', function(form, el, value) { return (($.trim(value).length > 0) && !isValidZip(value)) ? false : true }); $(".ket-validation").ketchup({},{ '#zip_code' : 'zip_code' });
Issue:
1. The validation of required-field fails if only spaces are given as input. This can be solved by overriding it as follows:
$.ketchup.validation('required', 'This field is required.', function(form, el, value) { var type = el.attr('type').toLowerCase(); if(type == 'checkbox' || type == 'radio') { return (el.attr('checked') == true); } else { return ($.trim(value).length != 0); } })
2. It works properly for text and textarea inputs. To apply validation on select, use id of select input
select input
= f.input :type, :prompt => "Select type", :collection => (some_collection), input_html: { id: "list_select" }
js code
$.ketchup.validation('lselect', 'You have not selected type!', function(form, el, value) { return value.length == 0 ? false : true }); $(".ket-validation").ketchup({},{ '#list_select' : 'select' });