Как сделать поле txtDate.Attributes["onChange"] =

Обсуждение вопросов клиентского программирования.

Модератор: Duncon

Ответить
Galina L
Сообщения: 5
Зарегистрирован: 03 фев 2005, 12:05

Как сделать, чтобы в текстовое поле 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);
}
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

Набросал на скорую руку ...

Код: Выделить всё

<script>

function checkDate(date) {

 if (date.value.length<2) return;
 else if (date.value.length>2) {
  date.value=date.value.substring(0, 2);
 }

 if (parseInt(date.value)>31) date.value = '01';


 d = new Date();
 month = d.getMonth() + 1;
 year = d.getFullYear();

 if (month<10) month='0'+month;

 date.value+='-'+month+'-'+year;

}

</script>

<input type="text" onKeyUp="checkDate(this)">
Ответить