Как сделать поле txtDate.Attributes["onChange"] =
Добавлено: 27 июн 2005, 16:33
Как сделать, чтобы в текстовое поле txtDate, в которое должна вводиться дата, писать только две первые цифры (день), а месяц и год подставлялись текущие (автоматически).
В файле dato.js находится функция getDateInstance(strDate)
<HTML>
<HEAD id="Heading">
<title id="PageTitle">Page1</title>
<script language="javascript" type="text/javascript" id="datoScript" src="dato.js"></script>
</HEAD>
</HTML>
Код вызова
txtDate.Attributes["onChange"] = "this.value = getDateInstance(this.value);";
В таком виде это не работает
Спасибо
Галина
PS
function getDateInstance(strDate){
if(strDate == null) return '';
var nStringLength = strDate.length;
if(nStringLength == 0) return '';
var arrDate;
if ((strDate.indexOf('-') > -1) && (strDate.indexOf('.') > -1))
return '';
if (strDate.indexOf('-') > -1)
arrDate = strDate.split("-");
else
arrDate = strDate.split(".");
var nArrLength = arrDate.length;
if(nArrLength > 3) return '';
var nDay = -1;
var nMonth = -1;
var nYear = -1;
var d = new Date();
var nCurrentDay = d.getDate();;
var nCurrentMonth = d.getMonth() + 1;
var nCurrentYear = d.getFullYear();
if (strDate.indexOf("/") > -1) return '';
if(nArrLength == 1) {
if(nStringLength > 2 && nStringLength % 2 != 0) return '';
nDay = parseInt(nStringLength <= 2 ? strDate : (parseInt(strDate.substr(0,1)) == 0) ? strDate.substr(1, 1) : strDate.substr(0, 2));
if(nStringLength > 2) nMonth = parseInt((parseInt(strDate.substr(2,1)) == 0) ? strDate.substr(3,1) :strDate.substr(2,2));
if(nStringLength > 4) nYear = parseInt(strDate.substr(4));
}
else {
var strD = arrDate[0];
nDay = parseInt(strD.length == 1 ? strD : (parseInt(strD) == 0 ? strD.substr(1,1) : strD));
var strM = arrDate[1];
nMonth = parseInt(strM.length == 0 ? -1 : (strM.length == 1 ? strM : (parseInt(strM) == 0 ? strM.substr(1,1) : strM)));
if(nArrLength == 3){
var strY = arrDate[2];
nYear = parseInt(strY.length == 0 ? -1 : (strY.length == 1 ? strY : (parseInt(strY.substr(0,1)) == 0 ? strY.substr(1) : strY)));
}
}
if(nDay == 0 || nDay > 31) return '';
if(nMonth == -1) {
nMonth = nCurrentMonth;
}
else if(nMonth == 0 || nMonth > 12) return '';
var bSet = false;
if (nYear < 100){
if (nYear + 2000 == nCurrentYear){
if (nMonth == nCurrentMonth && nDay >= nCurrentDay){
nYear += 2000;
bSet = true;
}
if ((nMonth > nCurrentMonth) && !bSet){
nYear += 2000;
bSet = true;
}
}
if ((nYear + 2000 > nCurrentYear) && !bSet){
nYear += 2000;
}
}
if(nYear == -1)
nYear = nCurrentYear;
if(!isValidDate(nDay, nMonth, nYear)) return '';
return dateToString(nDay, nMonth, nYear);
}
В файле dato.js находится функция getDateInstance(strDate)
<HTML>
<HEAD id="Heading">
<title id="PageTitle">Page1</title>
<script language="javascript" type="text/javascript" id="datoScript" src="dato.js"></script>
</HEAD>
</HTML>
Код вызова
txtDate.Attributes["onChange"] = "this.value = getDateInstance(this.value);";
В таком виде это не работает
Спасибо
Галина
PS
function getDateInstance(strDate){
if(strDate == null) return '';
var nStringLength = strDate.length;
if(nStringLength == 0) return '';
var arrDate;
if ((strDate.indexOf('-') > -1) && (strDate.indexOf('.') > -1))
return '';
if (strDate.indexOf('-') > -1)
arrDate = strDate.split("-");
else
arrDate = strDate.split(".");
var nArrLength = arrDate.length;
if(nArrLength > 3) return '';
var nDay = -1;
var nMonth = -1;
var nYear = -1;
var d = new Date();
var nCurrentDay = d.getDate();;
var nCurrentMonth = d.getMonth() + 1;
var nCurrentYear = d.getFullYear();
if (strDate.indexOf("/") > -1) return '';
if(nArrLength == 1) {
if(nStringLength > 2 && nStringLength % 2 != 0) return '';
nDay = parseInt(nStringLength <= 2 ? strDate : (parseInt(strDate.substr(0,1)) == 0) ? strDate.substr(1, 1) : strDate.substr(0, 2));
if(nStringLength > 2) nMonth = parseInt((parseInt(strDate.substr(2,1)) == 0) ? strDate.substr(3,1) :strDate.substr(2,2));
if(nStringLength > 4) nYear = parseInt(strDate.substr(4));
}
else {
var strD = arrDate[0];
nDay = parseInt(strD.length == 1 ? strD : (parseInt(strD) == 0 ? strD.substr(1,1) : strD));
var strM = arrDate[1];
nMonth = parseInt(strM.length == 0 ? -1 : (strM.length == 1 ? strM : (parseInt(strM) == 0 ? strM.substr(1,1) : strM)));
if(nArrLength == 3){
var strY = arrDate[2];
nYear = parseInt(strY.length == 0 ? -1 : (strY.length == 1 ? strY : (parseInt(strY.substr(0,1)) == 0 ? strY.substr(1) : strY)));
}
}
if(nDay == 0 || nDay > 31) return '';
if(nMonth == -1) {
nMonth = nCurrentMonth;
}
else if(nMonth == 0 || nMonth > 12) return '';
var bSet = false;
if (nYear < 100){
if (nYear + 2000 == nCurrentYear){
if (nMonth == nCurrentMonth && nDay >= nCurrentDay){
nYear += 2000;
bSet = true;
}
if ((nMonth > nCurrentMonth) && !bSet){
nYear += 2000;
bSet = true;
}
}
if ((nYear + 2000 > nCurrentYear) && !bSet){
nYear += 2000;
}
}
if(nYear == -1)
nYear = nCurrentYear;
if(!isValidDate(nDay, nMonth, nYear)) return '';
return dateToString(nDay, nMonth, nYear);
}