/* JQuery validation plugin code */ jQuery.validator.addMethod( "regex", function(value, element, regexp) { return this.optional(element) || regexp.test(value); }, "Please check your input." ); //must build rules based on html tags jQuery(document).ready(function() { var $ = jQuery; $("form.simple_form").each(function(index, el) { var rules = {}; var messages = {}; var findErrorMessage= function(rule_name, rule_type, el, message_attribute, default_error_message ) { //make sure we have a messages section if (typeof messages[rule_name] === 'undefined') { messages[rule_name] = {}; } //grab the message to create message //user sees if this pattern doesn't match var message = el.attr(message_attribute); if (message !== null && typeof message !== 'undefined') { messages[rule_name][rule_type] = message; } else if (typeof default_error_message !== 'undefined'){ messages[rule_name][rule_type] = default_error_message; } } var findInputName = function(el) { var inputName = el.attr('name'); if (typeof rules[inputName] === 'undefined') { rules[inputName] = {}; } return inputName; } // handle all required files $(el).find("input.required").each(function(indexRequired, requiredEl) { requiredEl = $(requiredEl); //create a rule for this element var inputName = findInputName(requiredEl); requiredEl.data("has_validator", true); rules[inputName]["required"] = true; //grab the data-pattern-message to create message //user sees if this pattern doesn't match findErrorMessage(inputName, "required", requiredEl, 'data-required-message', "This is required" ) }); //handle all regular expression by looking for data-pattern $(el).find("input[data-pattern]").each(function(indexRegex, inputEle) { var regExpEl = $(inputEle); var regExprString = regExpEl.attr("data-pattern"); var regExpr = null; //tries to create RegExp object and gives up if this fails try { regExpr = new RegExp(regExprString); } catch(e) { //can't build rule with this regular expression console.log("couldn't build validator for data-pattern=" + regExprString) return; } //create a rule for this element var inputName = findInputName(regExpEl); rules[inputName]["regex"] = regExpr; regExpEl.data("has_validator", true); //grab the data-pattern-message to create message //user sees if this pattern doesn't match findErrorMessage(inputName, "regex", regExpEl, 'data-pattern-message' ) }) var validateOptions = { onfocusout: function(element) { element = $(element); //don't do anything if not marked for validation if (element.data("has_validator") !== true) { return; } var isValid = $(element).valid(); if (!isValid){ $(element).focus(); } }, rules: rules, messages: messages, errorLabelContainer: "form.simple_form .errorArea" }; $(el).validate(validateOptions) }) })