Help with Javascript validating date fields

Hi All,

I have 2 sets of date fields to check for validity. If an invalid date is entered it is caught my the javascript. However, as soon as the 'OK' on the alert is clicked the form coninues to submit rather than the 'return false'


Any help much appreciated.

<script language="javascript">

//Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert("<%=PlaceTextFront(2439) & ":\n" & PlaceTextFront(2435)%>")
		return false;
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("<%=PlaceTextFront(2439) & ":\n" & PlaceTextFront(2435)%>")
		return false;
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("<%=PlaceTextFront(2439) & ":\n" & PlaceTextFront(2435)%>")
		return false;
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("<%=PlaceTextFront(2439) & ":\n" & PlaceTextFront(2435)%>")
		return false;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("<%=PlaceTextFront(2439) & ":\n" & PlaceTextFront(2435)%>")
		return false;
	}
return true;
}
 
function ValidateForm(){
	var dt=document.getElementById("selMonth").value+"/"+document.getElementById("selDay").value+"/"+document.getElementById("selYear").value
	if (isDate(dt)==false){
		//dt.focus()
	return false;
	}
 }
function ValidateForm2(){
	var dt2=document.getElementById("selMonth2").value+"/"+document.getElementById("selDay2").value+"/"+document.getElementById("selYear2").value
	if (isDate(dt2)==false){
		//dt2.focus()
	return false;
	}
 }
 
function CheckApplication()
{
if(document.getElementById("Sel_Country").value == 0)
   {
      alert("<%=PlaceTextFront(2436)%>"); // prompt user
      document.getElementById("Sel_Country").focus(); //set focus back to control
      return false;
   }
   ValidateForm();
   ValidateForm2();
}
</script>

Open in new window

LVL 5
Abiel de GrootDeveloperAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

hieloCommented:
On lines 108 and 109, you are not doing anything with the result you get back from the validation functions.  You can try this instead:
function CheckApplication()
{
if(document.getElementById("Sel_Country").value == 0)
   {
      alert("<%=PlaceTextFront(2436)%>"); // prompt user
      document.getElementById("Sel_Country").focus(); //set focus back to control
      return false;
   }

   if( ValidateForm() === false ||   ValidateForm2()===false )
   {
     return false;
   }
return true;
}

Open in new window


If the problem persists, then post back stating how you are calling CheckApplication()

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Zakaria AcharkiAnalyst DeveloperCommented:
You don't need to duplicate the code, to suit the best practice and DRY concept, all you need is a generic function like :

function ValidateForm(selMonth, selDay, selYear){
	return isDate( document.getElementById(selMonth).value+"/"+document.getElementById(selDay).value+"/"+document.getElementById(selYear).value );
}

Open in new window


Then you need to return a boolean from your "CheckApplication" function, something like :

function CheckApplication(){
	if(document.getElementById("Sel_Country").value == 0)
	{
      	alert("<%=PlaceTextFront(2436)%>"); // prompt user
      	document.getElementById("Sel_Country").focus(); //set focus back to control
      	return false;
	}

	return ValidateForm("selMonth", "selDay", "selYear") && ValidateForm("selMonth2", "selDay2", "selYear2");
}

Open in new window

Abiel de GrootDeveloperAuthor Commented:
many thanks to both of you.

A
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
JavaScript

From novice to tech pro — start learning today.