forked from saurabh/orbit4-5
101 lines
2.9 KiB
JavaScript
101 lines
2.9 KiB
JavaScript
var _number_of_validators_ = 0;
|
|
var FormValidator = function(form){
|
|
var fv = this,
|
|
elements_data = {},
|
|
failed_elements = [];
|
|
this.form = form;
|
|
this.elements = null;
|
|
this.validate_functions = {
|
|
required : function(value,element){
|
|
switch($(element).prop("tagName")){
|
|
case "INPUT":
|
|
switch(element.attr("type")){
|
|
case "text":
|
|
return (value == "" ? false : true);
|
|
break;
|
|
case "checkbox":
|
|
return element.is(":checked");
|
|
break;
|
|
}
|
|
case "SELECT":
|
|
return (value == "" ? false : true);
|
|
break;
|
|
}
|
|
},
|
|
nospace : function(value){
|
|
return (/\s/.test(value) ? false : true);
|
|
},
|
|
lowercase : function(value){
|
|
return (value == value.toLowerCase() ? true : false);
|
|
},
|
|
email : function(value){
|
|
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
|
return re.test(value);
|
|
}
|
|
}
|
|
|
|
this.initialize = function(){
|
|
fv.elements = form.find("*[data-fv-validation]");
|
|
_number_of_validators_++;
|
|
_putFieldsValidatorAndMessage();
|
|
_attachSubmitHandler();
|
|
}
|
|
|
|
var _attachSubmitHandler = function(){
|
|
fv.form.on("submit",function(){
|
|
return fv.isFormValidated();
|
|
})
|
|
}
|
|
|
|
this.isFormValidated = function(){
|
|
failed_elements = [];
|
|
$.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 + "]") : $("<div class='validator_error_class text-error' for='" + key + "'></div>"));
|
|
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);
|
|
failed_elements.push(el);
|
|
break;
|
|
}else{
|
|
error_span.remove();
|
|
}
|
|
}else{
|
|
console.info("Not validating for " + validators[i] + ". Skipping.");
|
|
}
|
|
}
|
|
})
|
|
if(failed_elements.length){
|
|
var offset = failed_elements[0].offset().top - fv.form.offset().top + fv.form.scrollTop();
|
|
fv.form.parent().animate({scrollTop:offset-50}, '300', 'swing');
|
|
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();
|
|
}
|