Avatar of Abiel de Groot
Abiel de GrootFlag for Spain

asked on 

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

JavaScript

Avatar of undefined
Last Comment
Abiel de Groot
ASKER CERTIFIED SOLUTION
Avatar of hielo
hielo
Flag of Wallis and Futuna image

Blurred text
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
Avatar of Zakaria Acharki
Zakaria Acharki
Flag of Morocco image

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

Avatar of Abiel de Groot
Abiel de Groot
Flag of Spain image

ASKER

many thanks to both of you.

A
JavaScript
JavaScript

JavaScript is a dynamic, object-based language commonly used for client-side scripting in web browsers. Recently, server side JavaScript frameworks have also emerged. JavaScript runs on nearly every operating system and in almost every mainstream web browser.

127K
Questions
--
Followers
--
Top Experts
Get a personalized solution from industry experts
Ask the experts
Read over 600 more reviews

TRUSTED BY

IBM logoIntel logoMicrosoft logoUbisoft logoSAP logo
Qualcomm logoCitrix Systems logoWorkday logoErnst & Young logo
High performer badgeUsers love us badge
LinkedIn logoFacebook logoX logoInstagram logoTikTok logoYouTube logo