Abiel de Groot
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.
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>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
many thanks to both of you.
A
A
Open in new window
Then you need to return a boolean from your "CheckApplication" function, something like :
Open in new window