Solved

Validation Script Bug Fixes and Add a feature...

Posted on 2004-08-22
6
307 Views
Last Modified: 2012-05-05
This script doesn't place the cursor to the top most input box/select box/radio/checkbox that has error.. also the text in the input field doesn't change to  a custom color.. like white text on red background if there's an error in the particular input field..
if someone can add that and fix the bug.. that would be great.. before it would put the cursor on the top most input field.. but not this time..

i will display the script and it's usage in the next post...
0
Comment
Question by:andreni78
  • 2
  • 2
  • 2
6 Comments
 

Author Comment

by:andreni78
ID: 11867094
SCRIPT:
function Validator(frmname){
   this.formobj=document.forms[frmname];
    if(!this.formobj)
    {
      alert("BUG: couldnot get Form object "+frmname);
         return;
    }
    if(this.formobj.onsubmit)
    {
     this.formobj.old_onsubmit = this.formobj.onsubmit;
     this.formobj.onsubmit=null;
    }
    else
    {
     this.formobj.old_onsubmit = null;
    }
    this.formobj.onsubmit=form_submit_handler;
    this.addValidation = add_validation;
    this.setAddnlValidationFunction=set_addnl_vfunction;
    this.clearAllValidations = clear_all_validations;
}
function set_addnl_vfunction(functionname)
{
 this.formobj.addnlvalidation = functionname;
}
function clear_all_validations()
{
    for(var itr=0;itr < this.formobj.elements.length;itr++)
    {
         this.formobj.elements[itr].validationset = null;
    }
}
var errMsg;
function form_submit_handler(){
    errMsg = "";
    var retVal = true;
    for(var itr=0;itr < this.elements.length;itr++)
    {
         if(this.elements[itr].validationset &&
       !this.elements[itr].validationset.validate())
         {
           retVal = false;
         }
    }
   if(errMsg>""){
     alert("Please correct these errors:"+errMsg);
     return false;
   }
   if(retVal && this.addnlvalidation)
    {
      str =" var ret = "+this.addnlvalidation+"()";
      eval(str);
   if(retVal && !ret) return ret;
   }
   return retVal;
}
function add_validation(itemname,descriptor,errstr)
{
    if(!this.formobj)
    {
         alert("BUG: the form object is not set properly");
         return;
    }//if
    var itemobj = this.formobj[itemname];

   if(itemobj.length && isNaN(itemobj.selectedIndex) )
   //for radio button; don't do for 'select' item
    {
         itemobj = itemobj[0];
    }    
     if(!itemobj)
    {
         alert("BUG: Couldnot get the input object named: "+itemname);
         return;
    }
   
     if(!itemobj.validationset)
    {
         itemobj.validationset = new ValidationSet(itemobj);
    }
    itemobj.validationset.add(descriptor,errstr);
}
function ValidationDesc(inputitem,desc,error)
{
   this.desc=desc;
    this.error=error;
    this.itemobj = inputitem;
    this.validate=vdesc_validate;
}
function vdesc_validate(){
  if(!this.itemobj.oldColor){
    this.itemobj.oldColor = "color:"+this.itemobj.style.backgroundColor;
  }
  if(!validateInput(this.desc,this.itemobj,this.error)){
    this.itemobj.style.backgroundColor="red"
    this.itemobj.focus();
    this.itemobj.onkeydown =

function(){this.style.backgroundColor=this.oldColor.split("color:")[1]};
    this.itemobj.onclick = this.itemobj.onkeydown;
    return false;
  } else {
    this.itemobj.style.backgroundColor=this.itemobj.oldColor.split("color:")[1];
    return true;
  }
}

function ValidationSet(inputitem)
{
   this.vSet=new Array();
    this.add= add_validationdesc;
    this.validate= vset_validate;
    this.itemobj = inputitem;
}
function add_validationdesc(desc,error)
{
 this.vSet[this.vSet.length]=
  new ValidationDesc(this.itemobj,desc,error);
}
function vset_validate()
{
   for(var itr=0;itr<this.vSet.length;itr++)
      {
        if(!this.vSet[itr].validate())
           {
             return false;
           }
      }
      return true;
}

/*  checks the validity of an email address entered
*   returns true or false
*/
function validateEmail(email)
{
   var splitted = email.match("^(.+)@(.+)$");
   if(splitted == null) return false;
   if(splitted[1] != null )
   {
     var regexp_user=/^\"?[\w-_\.]*\"?$/;
     if(splitted[1].match(regexp_user) == null) return false;
   }
   if(splitted[2] != null)
   {
     var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
     if(splitted[2].match(regexp_domain) == null)
      {
        var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
        if(splitted[2].match(regexp_ip) == null) return false;
     }// if
     return true;
   }
return false;
}

function TestComparison(objValue,strCompareElement,strvalidator,strError)
{
  var bRet=true;
  var objCompare=null;
  if(!objValue.form)
  {
     alert("BUG: No Form object!");
      return false
  }
  objCompare = objValue.form.elements[strCompareElement];
  if(!objCompare)
  {
    alert("BUG: Element with name"+strCompareElement+" not found !");
    return false;
  }
  if(strvalidator != "eqelmnt" &&
         strvalidator != "neelmnt")
  {
     if(isNaN(objValue.value))
      {
        errMsg += "\n\t"+objValue.name+": Should be a number ";
        return false;
      }//if
      if(isNaN(objCompare.value))
      {
        errMsg += "\n\t"+objCompare.name+": Should be a number ";
        return false;
      }//if        
  }//if
  var cmpstr="";
  switch(strvalidator)
  {
      case "eqelmnt":
               {
                 if(objValue.value != objCompare.value)
                 {
                      cmpstr = " should be equal to ";
                    bRet = false;
                 }//if
                 break;
              }//case
         case "ltelmnt":
              {
              if(eval(objValue.value) >= eval(objCompare.value))
                    {
                     cmpstr =  " should be less than ";
                      bRet = false;                        
                    }
                break;
              }//case
         case "leelmnt":
              {
                   if(eval(objValue.value) >  eval(objCompare.value))
                    {
                     cmpstr =  " should be less than or equal to";
                      bRet = false;                        
                    }
                break;
              }//case          
         case "gtelmnt":
              {
                   if(eval(objValue.value) <=  eval(objCompare.value))
                    {
                     cmpstr =  " should be greater than";
                      bRet = false;                        
                    }
                break;
              }//case
         case "geelmnt":
              {
                   if(eval(objValue.value) < eval(objCompare.value))
                    {
                     cmpstr =  " should be greater than or equal to";
                      bRet = false;                        
                    }
                break;
              }//case
         case "neelmnt":
              {
                 if(objValue.value.length > 0 &&
                   objCompare.value.length > 0 &&
                   objValue.value == objCompare.value)
                 {
                      cmpstr = " should be different from ";
                    bRet = false;
                 }//if
                 break;              
               }              
   }//switch
  if(bRet==false)
  {
     if(!strError || strError.length==0)
      {
        strError = objValue.name + cmpstr + objCompare.value;
       }//if
      errMsg += "\n\t"+strError;
  }//if
  return bRet;
}
function TestSelMin(objValue,strMinSel,strError)
{
   var bret = true;
    var objcheck = objValue.form.elements[objValue.name];
    var chkcount =0;
    if(objcheck.length)
    {
         for(var c=0;c < objcheck.length;c++)
         {
            if(objcheck[c].checked == "1")
            {
              chkcount++;
            }//if
         }//for
    }
    else
    {
      chkcount = (objcheck.checked == "1")?1:0;
    }
    var minsel = eval(strMinSel);
    if(chkcount < minsel)
    {
         if(!strError || strError.length ==0)
          {
               strError = "Please Select atleast"+minsel+" check boxes

for"+objValue.name;  
         }//if                                                              
          errMsg += "\n\t"+strError;
          bret = false;
    }
    return bret;
}

function TestDontSelectChk(objValue,chkValue,strError)
{
   var pass=true;
    var objcheck = objValue.form.elements[objValue.name];
   if(objcheck.length)
    {
         var idxchk=-1;
         for(var c=0;c < objcheck.length;c++)
         {
            if(objcheck[c].value == chkValue)
            {
              idxchk=c;
               break;
            }//if
         }//for
         if(idxchk>= 0)
         {
           if(objcheck[idxchk].checked=="1")
           {
             pass=false;
           }
         }//if
    }
    else
    {
         if(objValue.checked == "1")
         {
              pass=false;
         }//if
    }//else
    if(pass==false)
    {
    if(!strError || strError.length ==0)
        {
             strError = "Can't Proceed as you selected "+objValue.name;  
       }//if                
       errMsg += "\n\t"+strError;
     
     }
   return pass;
}

function TestRequiredInput(objValue,strError)
{
var ret = true;
   if(eval(objValue.value.length) == 0)
    {
       if(!strError || strError.length ==0)
       {
         strError = objValue.name + " : Required Field";
       }//if
       errMsg += "\n\t"+strError;
       ret=false;
    }//if
return ret;
}

function TestMaxLen(objValue,strMaxLen,strError)
{
var ret = true;
   if(eval(objValue.value.length) > eval(strMaxLen))
    {
      if(!strError || strError.length ==0)
      {
        strError = objValue.name + " : "+ strMaxLen +" characters maximum ";
      }//if
      errMsg += "\n\t"+strError + "\n\t[Current length = " + objValue.value.length + "

]";
      ret = false;
    }//if
return ret;
}

function TestMinLen(objValue,strMinLen,strError)
{
var ret = true;
   if(eval(objValue.value.length) <  eval(strMinLen))
    {
      if(!strError || strError.length ==0)
      {
        strError = objValue.name + " : " + strMinLen + " characters minimum  ";
      }//if              
      errMsg += "\n\t"+strError + "\n\t[Current length = " + objValue.value.length + "

]";
      ret = false;  
    }//if
return ret;
}

function TestInputType(objValue,strRegExp,strError,strDefaultError)
{
  var ret = true;

   var charpos = objValue.value.search(strRegExp);
    if(objValue.value.length > 0 &&  charpos >= 0)
    {
     if(!strError || strError.length ==0)
      {
        strError = strDefaultError;
     }//if
      errMsg += "\n\t"+strError + "\n\t [Error character position " +

eval(charpos+1)+"]";
      ret = false;
    }//if
 return ret;
}

function TestEmail(objValue,strError)
{
var ret = true;
    if(objValue.value.length > 0 && !validateEmail(objValue.value)      )
     {
       if(!strError || strError.length ==0)
       {
          strError = objValue.name+": Enter a valid Email address ";
       }//if                                              
       errMsg += "\n\t"+strError;
       ret = false;
     }//if
return ret;
}

function TestLessThan(objValue,strLessThan,strError)
{
var ret = true;
      if(isNaN(objValue.value))
       {
         errMsg += "\n\t"+objValue.name+": Should be a number ";
         ret = false;
       }//if
       else
      if(eval(objValue.value) >=  eval(strLessThan))
       {
         if(!strError || strError.length ==0)
         {
           strError = objValue.name + " : value should be less than "+ strLessThan;
         }//if              
         errMsg += "\n\t"+strError;
         ret = false;                
        }//if  
return ret;          
}

function TestGreaterThan(objValue,strGreaterThan,strError)
{
var ret = true;
    if(isNaN(objValue.value))
     {
       errMsg += "\n\t"+objValue.name+": Should be a number ";
       ret = false;
     }//if
      else
    if(eval(objValue.value) <=  eval(strGreaterThan))
      {
        if(!strError || strError.length ==0)
        {
          strError = objValue.name + " : value should be greater than "+ strGreaterThan;
        }//if              
        errMsg += "\n\t"+strError;  
       ret = false;
     }//if  
return ret;          
}

function TestRegExp(objValue,strRegExp,strError)
{
var ret = true;
   if( objValue.value.length > 0 &&
        !objValue.value.match(strRegExp) )
    {
      if(!strError || strError.length ==0)
      {
        strError = objValue.name+": Invalid characters found ";
      }//if                                                              
      errMsg += "\n\t"+strError;
      ret = false;                  
    }//if
return ret;
}
function TestDontSelect(objValue,index,strError)
{
var ret = true;
    if(objValue.selectedIndex == null)
     {
       alert("BUG: dontselect command for non-select Item");
       ret = false;
     }
      else
    if(objValue.selectedIndex == eval(index))
     {
      if(!strError || strError.length ==0)
       {
       strError = objValue.name+": Please Select one option ";
       }//if                                                              
       errMsg += "\n\t"+strError;
       ret =  false;                                  
      }
return ret;
}

function TestSelectOneRadio(objValue,strError)
{
    var objradio = objValue.form.elements[objValue.name];
    var one_selected=false;
    for(var r=0;r < objradio.length;r++)
    {
      if(objradio[r].checked == "1")
      {
           one_selected=true;
         break;
      }
    }
    if(false == one_selected)
    {
     if(!strError || strError.length ==0)
       {
        strError = "Please select one option from "+objValue.name;
       }    
       errMsg += "\n\t"+strError;
    }
return one_selected;
}

//*  Checks each field in a form
function validateInput(strValidateStr,objValue,strError)
{
    var ret = true;
   var epos = strValidateStr.search("=");
    var  command  = "";
    var  cmdvalue = "";
    if(epos >= 0)
    {
     command  = strValidateStr.substring(0,epos);
     cmdvalue = strValidateStr.substr(epos+1);
    }
    else
    {
     command = strValidateStr;
    }

    switch(command)
    {
        case "req":
        case "required":
         {
             ret = TestRequiredInput(objValue,strError)
          break;            
         }
       case "maxlength":
        case "maxlen":
          {
                ret = TestMaxLen(objValue,cmdvalue,strError)
            break;
          }
       case "minlength":
        case "minlen":
           {
                ret = TestMinLen(objValue,cmdvalue,strError)
            break;
           }
       case "alnum":
        case "alphanumeric":
           {
                    ret = TestInputType(objValue,"[^A-Za-z0-9]",strError,
                              objValue.name+": Only alpha-numeric characters allowed ");
                   break;
           }
       case "alnum_s":
        case "alphanumeric_space":
           {
                    ret = TestInputType(objValue,"[^A-Za-z0-9\\s]",strError,
                              objValue.name+": Only alpha-numeric characters and space

allowed ");
                   break;
           }            
        case "num":
        case "numeric":
           {
                ret = TestInputType(objValue,"[^0-9]",strError,
                              objValue.name+": Only digits allowed ");
               break;              
           }
       case "alphabetic":
        case "alpha":
           {
                ret = TestInputType(objValue,"[^A-Za-z]",strError,
                              objValue.name+": Only alphabetic characters allowed ");
               break;
           }
       case "alphabetic_space":
        case "alpha_s":
           {
                ret = TestInputType(objValue,"[^A-Za-z\\s]",strError,
                              objValue.name+": Only alphabetic characters and space

allowed ");
               break;
           }
       case "email":
          {
                  ret = TestEmail(objValue,strError);
              break;
          }
       case "lt":
        case "lessthan":
         {
               ret = TestLessThan(objValue,cmdvalue,strError);
             break;
         }
       case "gt":
        case "greaterthan":
         {
               ret = TestGreaterThan(objValue,cmdvalue,strError);
           break;
         }
       case "regexp":
         {
               ret = TestRegExp(objValue,cmdvalue,strError);
          break;
         }
       case "dontselect":
         {
                ret = TestDontSelect(objValue,cmdvalue,strError)
            break;
         }
         case "dontselectchk":
         {
              ret = TestDontSelectChk(objValue,cmdvalue,strError)
              break;
         }
         case "selmin":
         {
              ret = TestSelMin(objValue,cmdvalue,strError);
              break;
         }
         case "selone":
         {
              ret = TestSelectOneRadio(objValue,strError);
             break;
         }          
          //Comparisons
         case "eqelmnt":
          case "ltelmnt":
         case "leelmnt":
         case "gtelmnt":
         case "geelmnt":
         case "neelmnt":
         {
             return TestComparison(objValue,cmdvalue,command,strError);
             break;
         }
   }//switch
    return ret;
}



USAGE:

<form name="myform">
<select name="name1">
<option>One
<option>Two
<option>Three
</select>
<input type=text name="name2">
<input type=text name="name3">
<input type=radio name="name4" value="One"> One
<input type=radio name="name4" value="Two"> Two
<input type=radio name="name4" value="Three"> Three
<input type=checkbox name="name5" value="One"> One
<input type=checkbox name="name5" value="Two"> Two
<input type=checkbox name="name5" value="Three"> Three
<input type=submit>
</form>

<SCRIPT language=JavaScript type="text/javascript">
 var frmvalidator  = new Validator("myform");
<!-- for select list form, uses "dontselect=0" -->
 frmvalidator.addValidation("name1","dontselect=0","Select list error message");
<!-- "req" is for required entry for inputbox -->
 frmvalidator.addValidation("name2","req","inputbox error message");
<!-- "minlen=#" is minimum length requirement -->
 frmvalidator.addValidation("name3","minlen=3", "inputbox minimum length error message");
<!-- "selone" is for radio box requirement selection -->
 frmvalidator.addValidation("name4","selone","Radio box error message");
<!-- "selmin" is for checkbox requirement -->
 frmvalidator.addValidation("name5","selmin=1","checkbox error message");
</script>
</body>
</html>
0
 
LVL 9

Expert Comment

by:nimaig
ID: 11867480
I have modified only 'form_submit_handler' method. Replace your existing method with the modified one and check if it solves ur purpose.

function form_submit_handler(){
    errMsg = "";
    var retVal = true;
    var firstFrmValidateFailedObj;

    for(var itr=0;itr < this.elements.length;itr++)
    {
         if(this.elements[itr].validationset && !this.elements[itr].validationset.validate())
         {
           retVal = false;
           if(typeof(firstFrmValidateFailedObj) == "undefined"){

                       firstFrmValidateFailedObj = this.elements[itr];
                 }
         }
    }

   if(errMsg>""){
          alert("Please correct these errors:"+errMsg);
          if(typeof(firstFrmValidateFailedObj) != "undefined"){
                if(firstFrmValidateFailedObj.type == "text" || firstFrmValidateFailedObj.type == "textarea"){
                  firstFrmValidateFailedObj.select();
                }
           firstFrmValidateFailedObj.focus();
     }
     return false;
   }

   if(retVal && this.addnlvalidation){
      str =" var ret = "+this.addnlvalidation+"()";
      eval(str);
           if(retVal && !ret) return ret;
   }
   return retVal;
}
0
 
LVL 9

Accepted Solution

by:
nimaig earned 500 total points
ID: 11867549
Modified for textcolor as well.
=================================

<HTML>
<SCRIPT language="javascript">
var ORIGINAL_TEXT_COLOR = "black";
var ERROR_TEXT_COLOR = "white";
function Validator(frmname){

   this.formobj=document.forms[frmname];
    if(!this.formobj)
    {
      alert("BUG: couldnot get Form object "+frmname);
         return;
    }
    if(this.formobj.onsubmit)
    {
     this.formobj.old_onsubmit = this.formobj.onsubmit;
     this.formobj.onsubmit=null;
    }
    else
    {
     this.formobj.old_onsubmit = null;
    }
    this.formobj.onsubmit=form_submit_handler;
    this.addValidation = add_validation;
    this.setAddnlValidationFunction=set_addnl_vfunction;
    this.clearAllValidations = clear_all_validations;
}

function set_addnl_vfunction(functionname)
{
 this.formobj.addnlvalidation = functionname;
}

function clear_all_validations()
{
    for(var itr=0;itr < this.formobj.elements.length;itr++)
    {
         this.formobj.elements[itr].validationset = null;
    }
}

var errMsg;

function form_submit_handler(){
    errMsg = "";
    var retVal = true;
    var firstFrmValidateFailedObj;

    for(var itr=0;itr < this.elements.length;itr++)
    {
         if(this.elements[itr].validationset && !this.elements[itr].validationset.validate())
         {
           retVal = false;
           if(typeof(firstFrmValidateFailedObj) == "undefined"){

                       firstFrmValidateFailedObj = this.elements[itr];
                 }
         }
    }

   if(errMsg>""){
          alert("Please correct these errors:"+errMsg);
          if(typeof(firstFrmValidateFailedObj) != "undefined"){
                firstFrmValidateFailedObj.style.color=ORIGINAL_TEXT_COLOR;
                if(firstFrmValidateFailedObj.type == "text" || firstFrmValidateFailedObj.type == "textarea"){
                  firstFrmValidateFailedObj.select();
                }
           firstFrmValidateFailedObj.focus();
     }
     return false;
   }

   if(retVal && this.addnlvalidation){
      str =" var ret = "+this.addnlvalidation+"()";
      eval(str);
           if(retVal && !ret) return ret;
   }
   return retVal;
}


function add_validation(itemname,descriptor,errstr)
{
    if(!this.formobj)
    {
         alert("BUG: the form object is not set properly");
         return;
    }//if
    var itemobj = this.formobj[itemname];

   if(itemobj.length && isNaN(itemobj.selectedIndex) )
   //for radio button; don't do for 'select' item
    {
         itemobj = itemobj[0];
    }
     if(!itemobj)
    {
         alert("BUG: Couldnot get the input object named: "+itemname);
         return;
    }

     if(!itemobj.validationset)
    {
         itemobj.validationset = new ValidationSet(itemobj);
    }
    itemobj.validationset.add(descriptor,errstr);
}


function ValidationDesc(inputitem,desc,error)
{
   this.desc=desc;
    this.error=error;
    this.itemobj = inputitem;
    this.validate=vdesc_validate;
}


function vdesc_validate(){
  if(!this.itemobj.oldColor){
    this.itemobj.oldColor = "color:"+this.itemobj.style.backgroundColor;
  }
  if(!validateInput(this.desc,this.itemobj,this.error)){
    this.itemobj.style.backgroundColor="red"
    this.itemobj.style.color=ERROR_TEXT_COLOR;
    this.itemobj.focus();
    this.itemobj.onkeydown = function(){this.style.backgroundColor=this.oldColor.split("color:")[1];this.style.color=ORIGINAL_TEXT_COLOR};
      this.itemobj.onclick = this.itemobj.onkeydown;
      return false;
  } else {
      this.itemobj.style.backgroundColor=this.itemobj.oldColor.split("color:")[1];
      return true;
  }
}

function ValidationSet(inputitem)
{
   this.vSet=new Array();
    this.add= add_validationdesc;
    this.validate= vset_validate;
    this.itemobj = inputitem;
}
function add_validationdesc(desc,error)
{
 this.vSet[this.vSet.length]=
  new ValidationDesc(this.itemobj,desc,error);
}
function vset_validate()
{
   for(var itr=0;itr<this.vSet.length;itr++)
      {
        if(!this.vSet[itr].validate())
           {
             return false;
           }
      }
      return true;
}

/*  checks the validity of an email address entered
*   returns true or false
*/
function validateEmail(email)
{
   var splitted = email.match("^(.+)@(.+)$");
   if(splitted == null) return false;
   if(splitted[1] != null )
   {
     var regexp_user=/^\"?[\w-_\.]*\"?$/;
     if(splitted[1].match(regexp_user) == null) return false;
   }
   if(splitted[2] != null)
   {
     var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
     if(splitted[2].match(regexp_domain) == null)
      {
        var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
        if(splitted[2].match(regexp_ip) == null) return false;
     }// if
     return true;
   }
return false;
}

function TestComparison(objValue,strCompareElement,strvalidator,strError)
{
  var bRet=true;
  var objCompare=null;
  if(!objValue.form)
  {
     alert("BUG: No Form object!");
      return false
  }
  objCompare = objValue.form.elements[strCompareElement];
  if(!objCompare)
  {
    alert("BUG: Element with name"+strCompareElement+" not found !");
    return false;
  }
  if(strvalidator != "eqelmnt" &&
         strvalidator != "neelmnt")
  {
     if(isNaN(objValue.value))
      {
        errMsg += "\n\t"+objValue.name+": Should be a number ";
        return false;
      }//if
      if(isNaN(objCompare.value))
      {
        errMsg += "\n\t"+objCompare.name+": Should be a number ";
        return false;
      }//if
  }//if
  var cmpstr="";
  switch(strvalidator)
  {
      case "eqelmnt":
               {
                 if(objValue.value != objCompare.value)
                 {
                      cmpstr = " should be equal to ";
                    bRet = false;
                 }//if
                 break;
              }//case
         case "ltelmnt":
              {
              if(eval(objValue.value) >= eval(objCompare.value))
                    {
                     cmpstr =  " should be less than ";
                      bRet = false;
                    }
                break;
              }//case
         case "leelmnt":
              {
                   if(eval(objValue.value) >  eval(objCompare.value))
                    {
                     cmpstr =  " should be less than or equal to";
                      bRet = false;
                    }
                break;
              }//case
         case "gtelmnt":
              {
                   if(eval(objValue.value) <=  eval(objCompare.value))
                    {
                     cmpstr =  " should be greater than";
                      bRet = false;
                    }
                break;
              }//case
         case "geelmnt":
              {
                   if(eval(objValue.value) < eval(objCompare.value))
                    {
                     cmpstr =  " should be greater than or equal to";
                      bRet = false;
                    }
                break;
              }//case
         case "neelmnt":
              {
                 if(objValue.value.length > 0 &&
                   objCompare.value.length > 0 &&
                   objValue.value == objCompare.value)
                 {
                      cmpstr = " should be different from ";
                    bRet = false;
                 }//if
                 break;
               }
   }//switch
  if(bRet==false)
  {
     if(!strError || strError.length==0)
      {
        strError = objValue.name + cmpstr + objCompare.value;
       }//if
      errMsg += "\n\t"+strError;
  }//if
  return bRet;
}
function TestSelMin(objValue,strMinSel,strError)
{
   var bret = true;
    var objcheck = objValue.form.elements[objValue.name];
    var chkcount =0;
    if(objcheck.length)
    {
         for(var c=0;c < objcheck.length;c++)
         {
            if(objcheck[c].checked == "1")
            {
              chkcount++;
            }//if
         }//for
    }
    else
    {
      chkcount = (objcheck.checked == "1")?1:0;
    }
    var minsel = eval(strMinSel);
    if(chkcount < minsel)
    {
         if(!strError || strError.length ==0)
          {
               strError = "Please Select atleast"+minsel+" check boxes for"+objValue.name;
         }//if
          errMsg += "\n\t"+strError;
          bret = false;
    }
    return bret;
}

function TestDontSelectChk(objValue,chkValue,strError)
{
   var pass=true;
    var objcheck = objValue.form.elements[objValue.name];
   if(objcheck.length)
    {
         var idxchk=-1;
         for(var c=0;c < objcheck.length;c++)
         {
            if(objcheck[c].value == chkValue)
            {
              idxchk=c;
               break;
            }//if
         }//for
         if(idxchk>= 0)
         {
           if(objcheck[idxchk].checked=="1")
           {
             pass=false;
           }
         }//if
    }
    else
    {
         if(objValue.checked == "1")
         {
              pass=false;
         }//if
    }//else
    if(pass==false)
    {
    if(!strError || strError.length ==0)
        {
             strError = "Can't Proceed as you selected "+objValue.name;
       }//if
       errMsg += "\n\t"+strError;

     }
   return pass;
}

function TestRequiredInput(objValue,strError)
{
var ret = true;
   if(eval(objValue.value.length) == 0)
    {
       if(!strError || strError.length ==0)
       {
         strError = objValue.name + " : Required Field";
       }//if
       errMsg += "\n\t"+strError;
       ret=false;
    }//if
return ret;
}

function TestMaxLen(objValue,strMaxLen,strError)
{
var ret = true;
   if(eval(objValue.value.length) > eval(strMaxLen))
    {
      if(!strError || strError.length ==0)
      {
        strError = objValue.name + " : "+ strMaxLen +" characters maximum ";
      }//if
      errMsg += "\n\t"+strError + "\n\t[Current length = " + objValue.value.length + "]";
      ret = false;
    }//if
return ret;
}

function TestMinLen(objValue,strMinLen,strError)
{
var ret = true;
   if(eval(objValue.value.length) <  eval(strMinLen))
    {
      if(!strError || strError.length ==0)
      {
        strError = objValue.name + " : " + strMinLen + " characters minimum  ";
      }//if
      errMsg += "\n\t"+strError + "\n\t[Current length = " + objValue.value.length + "]";
      ret = false;
    }//if
return ret;
}

function TestInputType(objValue,strRegExp,strError,strDefaultError)
{
  var ret = true;

   var charpos = objValue.value.search(strRegExp);
    if(objValue.value.length > 0 &&  charpos >= 0)
    {
     if(!strError || strError.length ==0)
      {
        strError = strDefaultError;
     }//if
      errMsg += "\n\t"+strError + "\n\t [Error character position " + eval(charpos+1)+"]";
      ret = false;
    }//if
 return ret;
}

function TestEmail(objValue,strError)
{
var ret = true;
    if(objValue.value.length > 0 && !validateEmail(objValue.value)      )
     {
       if(!strError || strError.length ==0)
       {
          strError = objValue.name+": Enter a valid Email address ";
       }//if
       errMsg += "\n\t"+strError;
       ret = false;
     }//if
return ret;
}

function TestLessThan(objValue,strLessThan,strError)
{
var ret = true;
      if(isNaN(objValue.value))
       {
         errMsg += "\n\t"+objValue.name+": Should be a number ";
         ret = false;
       }//if
       else
      if(eval(objValue.value) >=  eval(strLessThan))
       {
         if(!strError || strError.length ==0)
         {
           strError = objValue.name + " : value should be less than "+ strLessThan;
         }//if
         errMsg += "\n\t"+strError;
         ret = false;
        }//if
return ret;
}

function TestGreaterThan(objValue,strGreaterThan,strError)
{
var ret = true;
    if(isNaN(objValue.value))
     {
       errMsg += "\n\t"+objValue.name+": Should be a number ";
       ret = false;
     }//if
      else
    if(eval(objValue.value) <=  eval(strGreaterThan))
      {
        if(!strError || strError.length ==0)
        {
          strError = objValue.name + " : value should be greater than "+ strGreaterThan;
        }//if
        errMsg += "\n\t"+strError;
       ret = false;
     }//if
return ret;
}

function TestRegExp(objValue,strRegExp,strError)
{
var ret = true;
   if( objValue.value.length > 0 &&
        !objValue.value.match(strRegExp) )
    {
      if(!strError || strError.length ==0)
      {
        strError = objValue.name+": Invalid characters found ";
      }//if
      errMsg += "\n\t"+strError;
      ret = false;
    }//if
return ret;
}
function TestDontSelect(objValue,index,strError)
{
var ret = true;
    if(objValue.selectedIndex == null)
     {
       alert("BUG: dontselect command for non-select Item");
       ret = false;
     }
      else
    if(objValue.selectedIndex == eval(index))
     {
      if(!strError || strError.length ==0)
       {
       strError = objValue.name+": Please Select one option ";
       }//if
       errMsg += "\n\t"+strError;
       ret =  false;
      }
return ret;
}

function TestSelectOneRadio(objValue,strError)
{
    var objradio = objValue.form.elements[objValue.name];
    var one_selected=false;
    for(var r=0;r < objradio.length;r++)
    {
      if(objradio[r].checked == "1")
      {
           one_selected=true;
         break;
      }
    }
    if(false == one_selected)
    {
     if(!strError || strError.length ==0)
       {
        strError = "Please select one option from "+objValue.name;
       }
       errMsg += "\n\t"+strError;
    }
return one_selected;
}

//*  Checks each field in a form
function validateInput(strValidateStr,objValue,strError)
{
    var ret = true;
   var epos = strValidateStr.search("=");
    var  command  = "";
    var  cmdvalue = "";
    if(epos >= 0)
    {
     command  = strValidateStr.substring(0,epos);
     cmdvalue = strValidateStr.substr(epos+1);
    }
    else
    {
     command = strValidateStr;
    }

    switch(command)
    {
        case "req":
        case "required":
         {
             ret = TestRequiredInput(objValue,strError)
          break;
         }
       case "maxlength":
        case "maxlen":
          {
                ret = TestMaxLen(objValue,cmdvalue,strError)
            break;
          }
       case "minlength":
        case "minlen":
           {
                ret = TestMinLen(objValue,cmdvalue,strError)
            break;
           }
       case "alnum":
        case "alphanumeric":
           {
                    ret = TestInputType(objValue,"[^A-Za-z0-9]",strError,objValue.name+": Only alpha-numeric characters allowed ");
                   break;
           }
       case "alnum_s":
        case "alphanumeric_space":
           {
                    ret = TestInputType(objValue,"[^A-Za-z0-9\\s]",strError,objValue.name+": Only alpha-numeric characters and space allowed ");
                   break;
           }
        case "num":
        case "numeric":
           {
                ret = TestInputType(objValue,"[^0-9]",strError,objValue.name+": Only digits allowed ");
               break;
           }
       case "alphabetic":
        case "alpha":
           {
                ret = TestInputType(objValue,"[^A-Za-z]",strError,objValue.name+": Only alphabetic characters allowed ");
               break;
           }
       case "alphabetic_space":
        case "alpha_s":
           {
                ret = TestInputType(objValue,"[^A-Za-z\\s]",strError,objValue.name+": Only alphabetic characters and space allowed ");
               break;
           }
       case "email":
          {
                  ret = TestEmail(objValue,strError);
              break;
          }
       case "lt":
        case "lessthan":
         {
               ret = TestLessThan(objValue,cmdvalue,strError);
             break;
         }
       case "gt":
        case "greaterthan":
         {
               ret = TestGreaterThan(objValue,cmdvalue,strError);
           break;
         }
       case "regexp":
         {
               ret = TestRegExp(objValue,cmdvalue,strError);
          break;
         }
       case "dontselect":
         {
                ret = TestDontSelect(objValue,cmdvalue,strError)
            break;
         }
         case "dontselectchk":
         {
              ret = TestDontSelectChk(objValue,cmdvalue,strError)
              break;
         }
         case "selmin":
         {
              ret = TestSelMin(objValue,cmdvalue,strError);
              break;
         }
         case "selone":
         {
              ret = TestSelectOneRadio(objValue,strError);
             break;
         }
          //Comparisons
         case "eqelmnt":
          case "ltelmnt":
         case "leelmnt":
         case "gtelmnt":
         case "geelmnt":
         case "neelmnt":
         {
             return TestComparison(objValue,cmdvalue,command,strError);
             break;
         }
   }//switch
    return ret;
}



</SCRIPT>

<form name="myform">
<input type=text name="name3">
<input type=text name="name2">
<select name="name1">
<option>One
<option>Two
<option>Three
</select>

<input type=radio name="name4" value="One"> One
<input type=radio name="name4" value="Two"> Two
<input type=radio name="name4" value="Three"> Three
<input type=checkbox name="name5" value="One"> One
<input type=checkbox name="name5" value="Two"> Two
<input type=checkbox name="name5" value="Three"> Three
<input type=submit>
</form>

<SCRIPT language=JavaScript type="text/javascript">
 var frmvalidator  = new Validator("myform");
<!-- for select list form, uses "dontselect=0" -->
 frmvalidator.addValidation("name1","dontselect=0","Select list error message");
<!-- "req" is for required entry for inputbox -->
 frmvalidator.addValidation("name2","req","inputbox error message");
<!-- "minlen=#" is minimum length requirement -->
 frmvalidator.addValidation("name3","minlen=3", "inputbox minimum length error message");
<!-- "selone" is for radio box requirement selection -->
 frmvalidator.addValidation("name4","selone","Radio box error message");
<!-- "selmin" is for checkbox requirement -->
 frmvalidator.addValidation("name5","selmin=1","checkbox error message");
</script>
</body>
</html>
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 36

Expert Comment

by:Zyloch
ID: 11867732
You script is a bit messy, I'd have to say. Is it ok if I change it to this:?


var errMsg="";
var formobj=false;

function Validator(frmname) {
   formobj=document.forms[frmname];
   if(!formobj) {
      alert("Could not get form object "+frmname+". Please try again.");
      return false;
   } else {
      for (var i=0;i<addValidation.length;i++) {
alert(i);
         validateInput(addValidation[i].split(","));
      }
      if (errMsg!="") {
         return false;
      }
   }
   return true;
}

function validateInput(elArray) {
   ret=true;
   if (!formobj.elements[elArray[0]]) {
      return false;
   } else {
      currEl=formobj.elements[elArray[0]];
   }
   if (elArray[1]) {
      epos=elArray[1].search("=");
   } else {
      return true;
   }
   command="";
   cmdvalue="";
   if (epos>=0) {
      command=elArray[1].substring(0,epos);
      cmdvalue=elArray[1].substr(epos+1);
   } else {
     command=elArray[1];
   }
   strErr=(elArray[2]) ? elArray[2] : "An Unspecified Error Occurred";
   switch(command) {
      case "req":
      case "required":
         ret=TestRequiredInput(currEl,strErr);
         break;            
      case "maxlength":
      case "maxlen":
         ret=TestLen(currEl,command,cmdvalue,strErr)
         break;
      case "minlength":
      case "minlen":
         ret=TestLen(currEl,command,cmdvalue,strErr)
         break;
      case "alnum":
      case "alphanumeric":
         ret=TestInputType(currEl,"[^A-Za-z0-9]",strErr,currEl.name+": Only alpha-numeric characters allowed!");
         break;
      case "alnum_s":
      case "alphanumeric_space":
         ret=TestInputType(currEl,"[^A-Za-z0-9\\s]",strErr,currEl.name+": Only alpha-numeric characters and spaces allowed!");
         break;            
      case "num":
      case "numeric":
         ret=TestInputType(currEl,"\D",strErr,currEl.name+": Only digits allowed!");
         break;              
      case "alphabetic":
      case "alpha":
         ret=TestInputType(objValue,"[^A-Za-z]",strErr,currEl.name+": Only alphabetic characters allowed!");
         break;
      case "alphabetic_space":
      case "alpha_s":
         ret=TestInputType(currEl,"[^A-Za-z\\s]",strErr,currEl.name+": Only alphabetic characters and space allowed!");
         break;
      case "email":
         ret=validateEmail(currEl,strErr);
         break;
      case "lt":
      case "lessthan":
         ret=TestInequality(currEl,command,cmdvalue,strErr);
         break;
      case "gt":
      case "greaterthan":
         ret=TestInequality(currEl,command,cmdvalue,strErr);
         break;
      case "regexp":
         ret=TestRegExp(currEl,cmdvalue);
         break;
      case "dontselect":
         ret = TestDontSelect(currEl,cmdvalue,strErr)
         break;
      case "dontselectchk":
         ret=TestDontSelectChk(currEl,cmdvalue,strErr)
         break;
      case "selmin":
         ret=TestSelMin(currEl,cmdvalue,strErr);
         break;
      case "selone":
         ret=TestSelectOneRadio(currEl,strErr);
         break;        
///Comparisons////////////////////////////////////////////////////
      case "eqelmnt":
      case "ltelmnt":
      case "leelmnt":
      case "gtelmnt":
      case "geelmnt":
      case "neelmnt":
         ret=TestComparison(currEl,cmdvalue,command,strErr);
         break;
      default:
         ret=false;
         break;
   }
   return ret;
}

function validateEmail(obj,strError) {
   email=obj.value
   if (email.match("^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$")!=null) {
      return true;
   }
   changeAppearance(obj,"white","red");
   if (errMsg=="") {
      obj.focus();
   }
   errMsg+=strError+"\n";
   return false;
}

function TestRequiredInput(obj,strError) {
   objValue=obj.value;
   if (objValue.length==0) {
      if (!strError||strError.length==0) {
         strError=obj.name+": Required Field!";
      }
      changeAppearance(obj,"white","red");
      if (errMsg=="") {
         obj.focus();
      }
      errMsg+=strError+"\n";
      return false;
   }
   return true;
}

function TestLen(obj,com,strLen,strError) {
   objValue=obj.value;
   ret=true;
   switch(com) {
      case "maxlength":
      case "maxlen":
         if (objValue.length>strLen) {
            ret=false;
         }
         break;
      case "minlength":
      case "minlen":
         if (objValue.length<strLen) {
            ret=false;
         }
         break;
      default:
         alert("Program Error:\nUnrecognized value passed to TestLen function!");
         break;
   }
   if (!ret) {
      changeAppearance(obj,"white","red");
      if (errMsg=="") {
         obj.focus();
      }
      errMsg+=strError+"\n";
      return ret;
   }
   return ret;
}


function TestInputType(obj,strRegExp,strError,strDefaultError) {
  objValue=obj.value;
  var charpos=objValue.search(strRegExp);
  if (strError&&(!strError.search("^\s+$"))) {
     strDefaultError=strError;
  }
  if(charpos>=0) {
     changeAppearance(obj,"white","red");
     if (errMsg=="") {
        obj.focus();
     }
     errMsg+=strError+"\n\t[Error at character position "+charpos+"]\n";
     return false;
   }
   return true;
}

function TestInequality(obj,com,numComp,strError) {
   ret=true;
   objValue=obj.value;
   if(isNaN(objValue.value)) {
      if (!strError||strError.length==0) {
         strError+="\n\t"+obj.name+": Should be a number!";
      }
      ret=false;
   } else {
      switch(com) {
         case "lt":
         case "lessthan":
         case "ltelmnt":
            if (objValue>=parseInt(numComp,10)) {
               if (!strError||strError.length==0) {
                  strError=obj.name+": value should be less than "+numComp;  
               }
               ret=false;
            }
            break;
         case "gt":
         case "greaterthan":
         case "gtelmnt":
            if (objValue<=parseInt(numComp,10)) {
               if (!strError||strError.length==0) {
                  strError=obj.name+": value should be greater than "+numComp;  
               }
               ret=false;
            }
            break;
         case "leelmnt":
            if (objValue>parseInt(numComp,10)) {
               if (!strError||strError.length==0) {
                  strError=obj.name+": value should be less than or equal to "+numComp;
               }
            }
            break;
         case "geelmnt":
            if (objValue<parseInt(numComp,10)) {
               if (!strError||strError.length==0) {
                  strError=obj.name+": value should be greater than or equal to "+numComp;
               }
            }
            break;
         default:
            alert("Program Error:\nUnrecognized value passed to TestInequality function!");
            break;
      }
      if (!ret) {
         changeAppearance(obj,"white","red");
         if (errMsg=="") {
            obj.focus();
         }
         errMsg+=strError+"\n";                      
      }  
   }
   return ret;          
}

function TestRegExp(obj,strRegExp) {
   strError="";
   objValue=obj.value;
   if (!objValue.value.match(strRegExp.toString())) {
     strError=obj.name+": Invalid characters found!";
   }                                                              
   errMsg+=strError;
   if (strError!="") {
      changeAppearance(obj,"white","red");
      if (errMsg=="") {
         obj.focus();
      }
      errMsg+="\n";
      return false;
   }
   return true;
}

function TestComparison(obj,strCompareElement,strvalidator,strError) {
   objValue=obj.value;
   ret=true;
   var objCompare=null;
   objCompare=obj.form.elements[strCompareElement];
   if(!objCompare) {
     alert("Element with name"+strCompareElement+" not found!");
     return false;
   }
   objCompareVal=objCompare.value;
   if(strvalidator=="leelmnt"||strvalidator=="geelmnt"||strvalidator=="gtelmnt"||strvalidator=="ltelmnt") {
      return(TestInequality(obj,strvalidator,objCompareVal,strError));
   }
   switch(strvalidator) {
      case "eqelmnt":
         if (objValue!=objCompareVal) {
            if (!strError||strError.length==0) {
               strError=obj.name+" should be equivalent to "+objCompare.name;
            }
            ret=false;
         }
         break;
      case "neelmnt":
         if (objValue==objCompareVal) {
            if (!strError||strError.length==0) {
               strError=obj.name+" should be different from "+objCompare.name;
            }
            ret = false;
         }
         break;              
      default:
         alert("Program Error:\nUnrecognized value passed to TestComparison function!");
         break;          
   }
  if(!ret) {
      changeAppearance(obj,"white","red");
      if (errMsg=="") {
         obj.focus();
      }
      errMsg+=strError+"\n";
  }
  return ret;
}

function TestSelMin(obj,strMinSel,strError) {
   var objcheck=obj.form.elements[obj.name];
   var chkcount=0;
   for (var i=0;i<objcheck.length;i++) {
      if(objcheck[i].checked=="1") {
         chkcount++;
      }
   }
   if(chkcount<parseInt(strMinSel,10)) {
      if (!strError||strError.length==0) {
         strError="Please Select at least "+minsel+" check boxes with name "+obj.name+"!";
      }
      changeAppearance(obj,"white","red");
      if (errMsg=="") {
         obj.focus();
      }
      errMsg+=strError+"\n";
      return false;
   }                                                      
   return true;
}

function TestDontSelectChk(obj,chkValue,strError) {
   ret=true;
   if(obj.length) {
      var idxchk=-1;
      for (var i=0;i<obj.length;i++) {
         if(obj[c].value==chkValue) {
            idxchk=c;
            break;
         }
      }
      if(idxchk!=-1) {
        if(obj[idxchk].checked) {
           ret=false;
        }
      }
   } else {
      if (obj.checked) {
         ret=false;
      }
   }
   if(!ret) {
      if (!strError||strError.length==0) {
         strError="Can't Proceed as you selected "+obj.name;  
      }                
      changeAppearance(obj,"white","red");
      if (errMsg=="") {
         obj.focus();
      }
      errMsg+=strError+"\n";
   }
   return ret;
}

function TestDontSelect(obj,index,strError) {
   ret = true;
   if (obj.selectedIndex==parseInt(index,10)) {
       ret = false;
       if (!strError||strError.length==0) {
          strError = obj.name+": Please don't select option "+index+"!";
       }      
       changeAppearance(obj,"white","red");
       if (errMsg=="") {
          obj.focus();
       }                                                        
       errMsg+=strError+"\n";                                
   }
   return ret;
}

function TestSelectOneRadio(obj,strError) {
   ret=false;
   for (var i=0;i<obj.length;i++) {
      if (obj[i].checked) {
         ret=true;
         break;
      }
   }
   if (!ret) {
      if (!strError||strError.length==0) {
         strError = "Please select one option from "+obj.name;
      }    
      errMsg+=strError+"\n";
   }
   return ret;
}

function changeAppearance(obj,fgcol,bgcol) {
   obj.style.backgroundColor=bgcol;
   obj.style.color=fgcol;
}


These functions are changed slightly and may have slighly different functions than you want. Usage is follows:

You can have those functions in an external js or on your page. On your page, also have this in the <head>:

<script language="javascript">
<!--

var addValidation = new Array;
addValidation[0]="name1,dontselect=0,Select list error message";
addValidation[1]="name2,req,inputbox error message";
addValidation[2]="name3,minlen=3,inputbox minimum length error message";

//-->
</script>

where you set the validations as such separated by comma.


Finally, in  your form tag, have this:

<form name="myform" onsubmit="return(Validator('myform'));">
0
 
LVL 36

Expert Comment

by:Zyloch
ID: 11867741
Oops, I spent a few hours typing all of this and editing so it was a stale window, sorry
0
 

Author Comment

by:andreni78
ID: 11867896
wow zyloch.. i don't want to spend all that time for nothing.. please answer my other post and i'll give you what you deserve.. definitely 500 isn't enough..
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

The task A number given should be formatted for easy reading by separating digits into triads. Format must be made inline via JavaScript, i.e., frameworks / functions are not welcome. So let’s take a number like this “12345678.91¿ and format i…
Having worked on larger scale sites, we found out that you are bound to look at more scalable solutions to integrating widgets, code snippets or complete applications and mesh them into functional sites, in any given composition. To share some of…
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now