又一日历输入效果没考虑兼容性,IE通过
onload = function()
{
var panel = new SelectPanel;
var rili = new Kalendar;
panel.Create();
rili.Create(panel);
panel.Apply(document.form1.a);
panel.Apply(document.form1.b);
}
/* 日历选择类
this.Width = 0; // 设置日历宽度,为零时不指定宽度。
this.Height = 0; // 设置日历高度,为零时不指定高度。
this.BorderColor = "#1095c6"; // 设置日历边框颜色。
this.BackColor = "white"; // 设置日历背景颜色。
this.CapBack = "#d9ebfe"; // 设置日历深色。
this.Tag = doc.createElement("table"); // 日历DOM节点。
this.Create = function(container) // 将日历绑定到指定对象。
*/
function Kalendar(win)
{
if(!win) win = self;
var doc = win.document;
var _Kalendar = this;
this.Width = 0;
this.Height = 0;
this.BorderColor = "#1095c6";
this.BackColor = "white";
this.CapBack = "#d9ebfe";
this.Tag = doc.createElement("table");
this.Tag.style.cursor = "default";
this.Create = function(container)
{
if(!container) container = doc.body;
this.Parent = container;
this.Tag.style.borderCollapse = "collapse";
this.Tag.border = 1;
this.Tag.borderColor = this.BorderColor;
this.Tag.width = this.Width ? this.Width : "";
this.Tag.height = this.Height ? this.Height : "";
this.Tag.rows[0].cells[0].bgColor = this.CapBack;
(container.Tag || container).appendChild(this.Tag);
BuildDateFace(new Date(sltNian.value, sltYue.value));
}
var today = new Date;
var tr = this.Tag.insertRow(); tr.insertCell();
var sltNian = doc.createElement("select");
sltNian.options.add(new Option(today.getFullYear() + "年", today.getFullYear()));
InitYearSelect();
function InitYearSelect()
{
while(sltNian.selectedIndex
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
做得比较急,所以没考虑兼容性。
通过两个类实现,一个是面板类,一个是日历类。
由于我开发时所有公共js都是在顶级窗口一次加载的,所以在子窗口创建对象时需要把当前窗口对象传进去,例如: var panel = new parent.parent.SelectPanel(self);如果没传self参数,默认就是加载js的窗口。
marcian 在网上找的那个公历算法有点复杂,呵呵。我获取当前月最大天数,以及当前月第一天是星期几是直接通过JS自带的Date函数来实现的。
代码如下:
// 获取当月最大天数
//asfman提供更简单的方式:return (new Date(y, m+1, 0)).getDate()
function GetDates(year, month)
{
var date = new Date(year, month, 31);
return 31 - date.getDate() || 31;
}
// 获取当月第一天是星期几
function GetFirstDay(year, month)
{
return (new Date(year, month, 1)).getDay();
}
/* 下面这部分可以不要,因为即使出现new Date(2007, -1, 31),这种现象,Date会自动转换成Date(2006, 12, 31)
if(month < 0)
{
month = 11;
year--;
}
if(month == 12)
{
month = 0;
year++;
}*/