📄 calendardateinput_cn.js
字号:
/***********************************************
Fool-Proof Date Input Script with DHTML Calendar
by Jason Moon - calendar@moonscript.com
************************************************/
// Customizable variables
var DefaultDateFormat = 'MM/DD/YYYY'; // If no date format is supplied, this will be used instead
var HideWait = 3; // Number of seconds before the calendar will disappear
var Y2kPivotPoint = 76; // 2-digit years before this point will be created in the 21st century
var UnselectedMonthText = ''; // Text to display in the 1st month list item when the date isn't required
var FontSize = 11; // In pixels
var FontFamily = 'Tahoma';
var CellWidth = 18;
var CellHeight = 16;
var ImageURL = '/GWHR/WebUI/UI/Calendar/calendar.jpg';
var NextURL = '/GWHR/WebUI/UI/Calendar/next.gif';
var PrevURL = '/GWHR/WebUI/UI/Calendar/prev.gif';
var CalBGColor = 'white';
var TopRowBGColor = 'buttonface';
var DayBGColor = 'lightgrey';
// Global variables
var ZCounter = 100;
var Today = new Date();
var WeekDays = new Array('S','M','T','W','T','F','S');
var MonthDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var MonthNames = new Array('1','2','3','4','5','6','7','8','9','10','11','12');
// Write out the stylesheet definition for the calendar
with (document) {
writeln('<style>');
writeln('td.calendarDateInput {letter-spacing:normal;line-height:normal;font-family:' + FontFamily + ',Sans-Serif;font-size:' + FontSize + 'px;}');
writeln('select.calendarDateInput {letter-spacing:.06em;font-family:Verdana,Sans-Serif;font-size:11px;}');
writeln('input.calendarDateInput {letter-spacing:.06em;font-family:Verdana,Sans-Serif;font-size:11px;}');
writeln('</style>');
}
// Only allows certain keys to be used in the date field
function YearDigitsOnly(e) {
var KeyCode = (e.keyCode) ? e.keyCode : e.which;
return ((KeyCode == 8) // backspace
|| (KeyCode == 9) // tab
|| (KeyCode == 37) // left arrow
|| (KeyCode == 39) // right arrow
|| (KeyCode == 46) // delete
|| ((KeyCode > 47) && (KeyCode < 58)) // 0 - 9
);
}
// Gets the absolute pixel position of the supplied element
function GetTagPixels(StartTag, Direction) {
var PixelAmt = (Direction == 'LEFT') ? StartTag.offsetLeft : StartTag.offsetTop;
while ((StartTag.tagName != 'BODY') && (StartTag.tagName != 'HTML')) {
StartTag = StartTag.offsetParent;
PixelAmt += (Direction == 'LEFT') ? StartTag.offsetLeft : StartTag.offsetTop;
}
return PixelAmt;
}
// Is the specified select-list behind the calendar?
function BehindCal(SelectList, CalLeftX, CalRightX, CalTopY, CalBottomY, ListTopY) {
var ListLeftX = GetTagPixels(SelectList, 'LEFT');
var ListRightX = ListLeftX + SelectList.offsetWidth;
var ListBottomY = ListTopY + SelectList.offsetHeight;
return (((ListTopY < CalBottomY) && (ListBottomY > CalTopY)) && ((ListLeftX < CalRightX) && (ListRightX > CalLeftX)));
}
// For IE, hides any select-lists that are behind the calendar
function FixSelectLists(Over) {
if (navigator.appName == 'Microsoft Internet Explorer') {
var CalDiv = this.getCalendar();
var CalLeftX = CalDiv.offsetLeft;
var CalRightX = CalLeftX + CalDiv.offsetWidth;
var CalTopY = CalDiv.offsetTop;
var CalBottomY = CalTopY + (CellHeight * 9);
var FoundCalInput = false;
formLoop :
for (var j=this.formNumber;j<document.forms.length;j++) {
for (var i=0;i<document.forms[j].elements.length;i++) {
if (typeof document.forms[j].elements[i].type == 'string') {
if ((document.forms[j].elements[i].type == 'hidden') && (document.forms[j].elements[i].name == this.hiddenFieldName)) {
FoundCalInput = true;
i += 3; // 3 elements between the 1st hidden field and the last year input field
}
if (FoundCalInput) {
if (document.forms[j].elements[i].type.substr(0,6) == 'select') {
ListTopY = GetTagPixels(document.forms[j].elements[i], 'TOP');
if (ListTopY < CalBottomY) {
if (BehindCal(document.forms[j].elements[i], CalLeftX, CalRightX, CalTopY, CalBottomY, ListTopY)) {
document.forms[j].elements[i].style.visibility = (Over) ? 'hidden' : 'visible';
}
}
else break formLoop;
}
}
}
}
}
}
}
// Displays a message in the status bar when hovering over the calendar days
function DayCellHover(Cell, Over, Color, HoveredDay) {
Cell.style.backgroundColor = (Over) ? DayBGColor : Color;
if (Over) {
if ((this.yearValue == Today.getFullYear()) && (this.monthIndex == Today.getMonth()) && (HoveredDay == Today.getDate())) self.status = 'Click to select today';
else {
var Suffix = HoveredDay.toString();
switch (Suffix.substr(Suffix.length - 1, 1)) {
case '1' : Suffix += (HoveredDay == 11) ? 'th' : 'st'; break;
case '2' : Suffix += (HoveredDay == 12) ? 'th' : 'nd'; break;
case '3' : Suffix += (HoveredDay == 13) ? 'th' : 'rd'; break;
default : Suffix += 'th'; break;
}
self.status = 'Click to select ' + this.monthName + ' ' + Suffix;
}
}
else self.status = '';
return true;
}
// Sets the form elements after a day has been picked from the calendar
function PickDisplayDay(ClickedDay) {
this.show();
var MonthList = this.getMonthList();
var DayList = this.getDayList();
var YearField = this.getYearField();
FixDayList(DayList, GetDayCount(this.displayed.yearValue, this.displayed.monthIndex));
// Select the month and day in the lists
for (var i=0;i<MonthList.length;i++) {
if (MonthList.options[i].value == this.displayed.monthIndex) MonthList.options[i].selected = true;
}
for (var j=1;j<=DayList.length;j++) {
if (j == ClickedDay) DayList.options[j-1].selected = true;
}
this.setPicked(this.displayed.yearValue, this.displayed.monthIndex, ClickedDay);
// Change the year, if necessary
YearField.value = this.picked.yearPad;
YearField.defaultValue = YearField.value;
}
// Builds the HTML for the calendar days
function BuildCalendarDays() {
var Rows = 5;
if (((this.displayed.dayCount == 31) && (this.displayed.firstDay > 4)) || ((this.displayed.dayCount == 30) && (this.displayed.firstDay == 6))) Rows = 6;
else if ((this.displayed.dayCount == 28) && (this.displayed.firstDay == 0)) Rows = 4;
var HTML = '<table width="' + (CellWidth * 7) + '" cellspacing="0" cellpadding="1" style="cursor:default">';
for (var j=0;j<Rows;j++) {
HTML += '<tr>';
for (var i=1;i<=7;i++) {
Day = (j * 7) + (i - this.displayed.firstDay);
if ((Day >= 1) && (Day <= this.displayed.dayCount)) {
if ((this.displayed.yearValue == this.picked.yearValue) && (this.displayed.monthIndex == this.picked.monthIndex) && (Day == this.picked.day)) {
TextStyle = 'color:white;font-weight:bold;'
BackColor = DayBGColor;
}
else {
TextStyle = 'color:black;'
BackColor = CalBGColor;
}
if ((this.displayed.yearValue == Today.getFullYear()) && (this.displayed.monthIndex == Today.getMonth()) && (Day == Today.getDate())) TextStyle += 'border:1px solid darkred;padding:0px;';
HTML += '<td align="center" class="calendarDateInput" style="cursor:default;height:' + CellHeight + ';width:' + CellWidth + ';' + TextStyle + ';background-color:' + BackColor + '" onClick="' + this.objName + '.pickDay(' + Day + ')" onMouseOver="return ' + this.objName + '.displayed.dayHover(this,true,\'' + BackColor + '\',' + Day + ')" onMouseOut="return ' + this.objName + '.displayed.dayHover(this,false,\'' + BackColor + '\')">' + Day + '</td>';
}
else HTML += '<td class="calendarDateInput" style="height:' + CellHeight + '"> </td>';
}
HTML += '</tr>';
}
return HTML += '</table>';
}
// Determines which century to use (20th or 21st) when dealing with 2-digit years
function GetGoodYear(YearDigits) {
if (YearDigits.length == 4) return YearDigits;
else {
var Millennium = (YearDigits < Y2kPivotPoint) ? 2000 : 1900;
return Millennium + parseInt(YearDigits,10);
}
}
// Returns the number of days in a month (handles leap-years)
function GetDayCount(SomeYear, SomeMonth) {
return ((SomeMonth == 1) && ((SomeYear % 400 == 0) || ((SomeYear % 4 == 0) && (SomeYear % 100 != 0)))) ? 29 : MonthDays[SomeMonth];
}
// Highlights the buttons
function VirtualButton(Cell, ButtonDown) {
if (ButtonDown) {
Cell.style.borderLeft = 'buttonshadow 1px solid';
Cell.style.borderTop = 'buttonshadow 1px solid';
Cell.style.borderBottom = 'buttonhighlight 1px solid';
Cell.style.borderRight = 'buttonhighlight 1px solid';
}
else {
Cell.style.borderLeft = 'buttonhighlight 1px solid';
Cell.style.borderTop = 'buttonhighlight 1px solid';
Cell.style.borderBottom = 'buttonshadow 1px solid';
Cell.style.borderRight = 'buttonshadow 1px solid';
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -