您的位置:首页 > Web前端 > JavaScript

js日历控件

2009-03-03 17:57 489 查看
1、js文件calendar.js

/*

----------- Calendar : Day Selecter ------------

author : satellite @ cnvery

create : 2005-11-17

site : http://www.cnvery.net/
------------------------------------------------

----------- Example ----------------------------

<input type='text' name='someDateField' size='13' readonly='readonly' onclick='javascript:calendar.setHook(this)' />

so easy:

onclick='javascript:calendar.setHook(this)'

and you can set the field readonly

readonly='readonly'

------------------------------------------------

*/

function cnVeryCalendar()

{

//Style

var border_frame = '#468DDD';

var border_inner = '#f6f6f6';

var fore_frameCaption = '#ffffff';

var back_frameCaption = '#468DDD';

var fore_currentMonth = '#ff0000';

var back_weekName = '#e9e9e9';

var back_nullDay = '#fafafa';

var fore_dayMouseOver = '#ff6600';

var back_dayMouseOver = '#eeeeee';

var font_cnChar = 'font-family:宋体,sans-serif; font-size:12px;';

var font_numChar = 'font-family:tahoma,arial,sans-seirf; font-size:11px;';

var style_cell = 'line-height:14px; border-color:' + border_inner;

var today_decoration = "font-weight:bold; background:url('bbs/images/calendar_today.gif') center no-repeat;"

// "font-weight:bold"

//Declare

var reciever;

var today = new Date();

var y = today.getFullYear();

var m = today.getMonth() + 1;

//Return Max Days In The Month

this.daysInMonth = function(y, m)

{

switch (m)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

return 31;

case 4:

case 6:

case 9:

case 11:

return 30;

case 2:

//Is Leep Year

if (y % 4 != 0)

{

return 28;

}

if (y % 100 == 0)

{

return y % 400 == 0 ? 29 : 28;

}

return 29;

}

}

//Generate Codes

this.generateCalendarTable = function()

{

var i;

var j = new Date(y, m-1, 1).getDay();

var k = this.daysInMonth(y, m);

var body = '';

//Frame Table Header

body += "<table align='center' cellpadding='2' cellspacing='1' width='100%' height='100%' style='border:1px " + border_frame + " solid; background:white;'>";

body += " <tr>";

body += " <td style='background:" + back_frameCaption + ";" + font_cnChar + "' height='20'>";

body += " <div style='color:" + fore_frameCaption + "; float:left'><b>日历控件</b></div>";

body += " <div style='float:right'>";

body += " <a href=""javascript:calendar.setValue('')"" style='color:" + fore_frameCaption + "; text-decoration:none;" + font_cnChar + "'>[擦除]</a> ";

body += " <a href='javascript:calendar.fadeOut()' style='color:" + fore_frameCaption + "; text-decoration:none;" + font_cnChar + "'>[关闭]</a>";

body += " </div>";

body += " </td>";

body += " </tr>";

body += " <tr>";

body += " <td style='padding-bottom:0px'>";

body += " <table align='center' width='99%' cellpadding='0' cellspacing='0'>";

body += " <tr>";

body += " <td style='" + font_cnChar + "'><a href='javascript:calendar.loadPreviousYear()' style='text-decoration:none; color:" + fore_dayMouseOver + "'><font face='webdings'>3</font></a>年<a href='javascript:calendar.loadNextYear()' style='text-decoration:none; color:" + fore_dayMouseOver + "'><font face='webdings'>4</font></a></td>";

body += " <td align='center' nowrap='nowrap' style='color:" + fore_currentMonth + ";" + font_cnChar + "'><b>"+ y + "年" + m + "月</b></td>";

body += " <td align='right' style='" + font_cnChar + "'><a href='javascript:calendar.loadPreviousMonth()' style='text-decoration:none; color:" + fore_dayMouseOver + "'><font face='webdings'>3</font></a>月<a href='javascript:calendar.loadNextMonth()' style='text-decoration:none; color:" + fore_dayMouseOver + "'><font face='webdings'>4</font></a></td>";

body += " </tr>";

body += " </table>";

body += " </td>";

body += " </tr>";

body += " <tr>";

body += " <td>";

//Calendar Table Header

body += "<table align='center' width='99%' cellpadding='3' cellspacing='0' border='1' bordercolor='" + border_inner + "' style='border-collapse:collapse; table-layout:fixed;'>";

body += " <tr align='center' style='background:" + back_weekName + "'>";

body += " <td style='" + font_cnChar + style_cell + "'>日</td>";

body += " <td style='" + font_cnChar + style_cell + "'>一</td>";

body += " <td style='" + font_cnChar + style_cell + "'>二</td>";

body += " <td style='" + font_cnChar + style_cell + "'>三</td>";

body += " <td style='" + font_cnChar + style_cell + "'>四</td>";

body += " <td style='" + font_cnChar + style_cell + "'>五</td>";

body += " <td style='" + font_cnChar + style_cell + "'>六</td>";

body += " </tr>";

//Insert Null Days Before The First Day In Current Month

if (j != 0)

{

body += "<tr align='center'>";

body += ("<td style='background:" + back_nullDay + style_cell + "' colspan='" + j + "'></td>");

}

//Loop Each Days In Current Month

for (i=1; i<=k; i++)

{

//Row Begin

if ((i+j) % 7 == 1)

{

body += "<tr align='center'>";

}

//Cells Day By Day

body += "<td";

body += " onmouseover=""this.style.backgroundColor='" + back_dayMouseOver + "'; this.style.color='" + fore_dayMouseOver + "'""";

body += " onmouseout=""this.style.backgroundColor=''; this.style.color=''""";

body += " onclick=""calendar.setValue('" + y + "-" + m + "-" + i + "')""";

if (y == today.getFullYear() && m == today.getMonth()+1 && i == today.getDate())

{

body += "cursor:hand; " + today_decoration + "; " + font_numChar + style_cell + """";

}

else

{

body += " style='cursor:hand; " + font_numChar + style_cell + "'";

}

body += ">" + i + "</td>";

//Row End

if ((i+j) % 7 == 0)

{

body += ("</tr>");

}

}

//Append Null Days After The Last Day In Current Month

if ((i+j) % 7 != 0)

{

body += ("<td style='background:" + back_nullDay + style_cell + "' colspan='" + (8 - (i+j)%7) + "'></td>");

body += ("</tr>");

}

if (j < (36-k))

{

body += ("<tr><td colspan='7' style='background:" + back_nullDay + style_cell + "'> </td></tr>");

}

if (j == 0 && k == 28)

{

body += ("<tr><td colspan='7' style='background:" + back_nullDay + style_cell + "'> </td></tr>");

}

//End Calendar Table

body += "</table>";

//End Frame Table

body += "</td></tr></table>";

//Return

return body;

}

//Load Previous Year

this.loadPreviousYear = function()

{

y--;

__cnVeryCalendarContainer.innerHTML = this.generateCalendarTable();

}

this.loadNextYear = function()

{

y++;

__cnVeryCalendarContainer.innerHTML = this.generateCalendarTable();

}

this.loadPreviousMonth = function()

{

m--;

if (m < 1)

{

m = 12;

y--;

}

__cnVeryCalendarContainer.innerHTML = this.generateCalendarTable();

}

this.loadNextMonth = function()

{

m++;

if (m > 12)

{

m = 1;

y++;

}

__cnVeryCalendarContainer.innerHTML = this.generateCalendarTable();

}

//Get Position

this.getAbsolutePosition = function(element)

{

var point = { x: element.offsetLeft, y: element.offsetTop };

//Recursion

if (element.offsetParent)

{

var parentPoint = this.getAbsolutePosition(element.offsetParent);

point.x += parentPoint.x;

point.y += parentPoint.y;

}

return point;

};

//Pop Layer

this.setHook = function(dateField)

{

if (__cnVeryCalendarContainer.style.display != 'none' && reciever.id == dateField.id)

{

__cnVeryCalendarContainer.style.display = 'none';

return;

}

reciever = dateField;

//-- 如果不想在第二次打开日历时回归为当前月,则把下面两行注释掉或删掉 --

y = today.getFullYear();

m = today.getMonth() + 1;

//----------------------------

var point = this.getAbsolutePosition(dateField);

__cnVeryCalendarContainer.style.left = (point.x + dateField.offsetWidth + 5) + 'px';

__cnVeryCalendarContainer.style.top = point.y + 'px';

__cnVeryCalendarContainer.innerHTML = this.generateCalendarTable();

__cnVeryCalendarContainer.style.display = '';

}

//Hide Layer

this.fadeOut = function()

{

__cnVeryCalendarContainer.style.display = 'none';

}

//Click a Day Cell To Add The Value

this.setValue = function(date)

{

reciever.value = date;

this.fadeOut();

}

}

//Render Instance

document.write("<div id='__cnVeryCalendarContainer' style='width:200px; height:190px; position:absolute; float:left; display:none; z-index:999'></div>");

var calendar = new cnVeryCalendar();

2、控件绑定

<input type="text" runat="server" id="txt_endDate" onfocus="calendar.setHook(this)" />

或则

this.tb_enddate.Attributes.Add("onfocus", "calendar.setHook(this)");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: