var _number_of_validators_ = 0; var FormValidator = function(form){ var fv = this, elements_data = {}; this.form = form; this.elements = null; this.validate_functions = { required : function(value,element){ switch(element.attr("type")){ case "text": return (value == "" ? false : true); break; case "checkbox": return element.is(":checked"); break; } }, nospace : function(value){ return (/\s/.test(value) ? false : true); }, email : function(){ } } this.initialize = function(){ fv.elements = form.find("*[data-fv-validation]"); _number_of_validators_++; _putFieldsValidatorAndMessage(); _attachSubmitHandler(); } var _attachSubmitHandler = function(){ fv.form.on("submit",function(){ $.each(elements_data,function(key,element){ var validators = element.validators, messages = element.messages, el = fv.form.find("#" + key); for(i = 0; i < validators.length; i++){ var error_span = (fv.form.find("div[for=" + key + "]").length ? $("div[for=" + key + "]") : $("
")); if(typeof fv.validate_functions[validators[i]] == "function"){ if(!fv.validate_functions[validators[i]](el.val(),el)){ error_span.text(messages[i]); el.after(error_span); break; }else{ error_span.remove(); } }else{ console.info("Not validating for " + validators[i] + ". Skipping."); } } }) if(fv.form.find("div.validator_error_class").length){ return false; }else{ return true; } }) } var _putFieldsValidatorAndMessage = function(){ $.each(fv.elements,function(i,element){ var element = $(element), validators = element.data("fv-validation").split(";").slice(0,-1), messages = element.data("fv-messages").split(";").slice(0,-1), id = (typeof element.attr("id") == "undefined" ? _generateElementId(element) : element.attr("id")); elements_data[id] = {}; elements_data[id].validators = validators; elements_data[id].messages = messages; }) } var _generateElementId = function(element){ var name = element.attr("name").replace(/\[+(.*?)\]+/g,"$1") + "_" + _number_of_validators_; element.attr("id",name); return name; } this.initialize(); }