今天寫了個javascript的日期控件,放上來以便日後查用(支持Firefox):
1. UCtrl_Date.js文件
2. 調用:

4. 如加上下面的文件
5.現在就可以直接調用了,且效果認為比上面的還要好些
<input type="text" id="ShowDate1" name="ShowDate1" onfocus="OpenDate(this)" value="2006-06-07" readonly />

即當鼠標放在文本框中時顯示日期控件,單擊所選日期後,文本框獲得日期,關閉日期控件
1. UCtrl_Date.js文件
1
2
3
var siteName = "/Test2";//虛擬目錄名稱;只在顯示圖片(上一年,上一月,下一年,下一月)時有用
4
5
//用戶控件日期
6
function UCtrlDate()
7
{
8
this.ID = "UCtrlDate1";
9
this.Width = "100%";
10
this.Year = 0;
11
this.Month = 0;
12
this.Day = 0;
13
this.Parent = document.body; //容器
14
this.EnableDay = 0; //有效天數
15
this.TWDate = true; //true表台灣日期, false表西元日期
16
this.IsImg=true;//是否顯示圖片(上一年,上一月,下一年,下一月)
17
this.currentTD = null; //當前TD
18
this.Value = GetDate;
19
20
//定義圖片
21
this.IMG_NextMonth_Enabled = siteName +"/images/right.gif";
22
this.IMG_NextMonth = siteName +"/images/right1.gif";
23
this.IMG_PreMonth_Enabled = siteName +"/images/left.gif";
24
this.IMG_PreMonth = siteName +"/images/left1.gif";
25
this.IMG_NextYear = siteName +"/images/right.gif";
26
this.IMG_PreYear = siteName +"/images/left.gif";
27
//定義顏色
28
this.CBG_Title = "#EEFFDD"; //標題背景色
29
this.CF_Title = "#000000";//標題字體色
30
this.CBG_Head = "#FFFFFF";//星期的背景色
31
this.CF_Head = "#000000";//星期的字體色
32
this.CBG_Body_Enabled = "#FFFFFF";//主體有效背景色
33
this.CF_Body_Enabled = "#000000"//主體有效字體色
34
this.CBG_Body = "#FFFFFF";//主體無效背景色
35
this.CF_Body = "#CBCBCB"//主體無效字體色
36
this.CBG_Selected = "#FFFF00";//當前被選中的背景色
37
this.CF_Selected = "#000000";//當前被選中的字體色
38
this.CBG_OnMouseOver = "#FFFF00"; //鼠標放上去的背景色
39
//定義字體大小
40
this.FZ_Title = "12px";//標題字體大小
41
this.FZ_Head = "12px";//星期字體大小
42
this.FZ_Body = "12px";//主體字體大小
43
44
//代理
45
this.OnClick = null;
46
47
Init(this,new Date());
48
this.OnLoad = CreateTable;
49
}
50
51
//初使化變量
52
function Init(sender,curDate)
53
{
54
sender.Year = curDate.getFullYear();
55
sender.Month = curDate.getMonth()+1
56
sender.Day = curDate.getDate();
57
58
}
59
60
//創建主體表格
61
function CreateTable()
62
{
63
var args = CreateTable.arguments;
64
var sender = null;
65
if(args.length==1) sender = args[0];
66
else sender = this;
67
68
var ctDate = new Date();
69
if(sender.Year==0) sender.Year = ctDate.getFullYear();
70
if(sender.Month==0) sender.Month = ctDate.getMonth()+1;
71
if(sender.Day==0) sender.Day = ctDate.getDate();
72
73
var table = document.createElement("table");
74
table.cellPadding=3;
75
table.cellSpacing=0;
76
table.rules="none";
77
table.bordercolordark="#FFFFFF";
78
table.borderColor = "#ebebeb";
79
table.width = sender.Width;
80
table.id = sender.ID + "_Table";
81
table.border = 1;
82
CreateCaption(sender,table);
83
CreateHead(sender,table);
84
CreateBody(sender,table);
85
sender.Parent.appendChild(table);
86
}
87
88
//創建標題
89
function CreateCaption(sender,table)
90
{
91
var row = table.insertRow(table.rows.length);
92
row.bgColor = sender.CBG_Title;
93
row.style.height="22px";
94
95
//上一年
96
var cell = row.insertCell(0);
97
cell.align = "center";
98
cell.style.color = sender.CF_Title;
99
cell.style.fontSize = sender.FZ_Title;
100
uctrlA = document.createElement("A");
101
uctrlA.href="javascript:";
102
uctrlA.PUCtrl = sender;
103
uctrlA.onclick = PreYear;
104
if(sender.EnableDay<=0)
105
{
106
if(!sender.IsImg) uctrlA.innerHTML = "上年";
107
else CreateIMG(uctrlA,sender.IMG_PreYear);
108
}
109
cell.appendChild(uctrlA);
110
//上一月
111
var cell1 = row.insertCell(1);
112
cell1.align = "center";
113
cell1.style.color = sender.CF_Title;
114
cell1.style.fontSize = sender.FZ_Title;
115
var pDate = new Date();
116
var preDate = new Date(sender.Year + "/" + sender.Month + "/" + pDate.getDate());
117
var isShow = false;
118
if(preDate>pDate) isShow = true;
119
if(sender.EnableDay<=0) isShow = true;
120
uctrlA = document.createElement("A");
121
uctrlA.href="javascript:";
122
uctrlA.PUCtrl = sender;
123
uctrlA.onclick = PreMonth;
124
if(isShow)
125
{
126
if(!sender.IsImg) uctrlA.innerHTML = "上月";
127
else CreateIMG(uctrlA,sender.IMG_PreMonth_Enabled);
128
cell1.appendChild(uctrlA);
129
}
130
else
131
{
132
if(!sender.IsImg) cell1.innerHTML = "上月";
133
CreateIMG(uctrlA,sender.IMG_PreMonth);
134
}
135
//顯示年月日
136
cell = row.insertCell(2);
137
cell.align = "center";
138
cell.valign = "middle";
139
cell.colSpan = 3;
140
cell.style.color = sender.CF_Title;
141
cell.style.fontSize = sender.FZ_Title;
142
cell.PUCtrl = sender;
143
if(sender.TWDate)
144
{
145
var txtYear = "<input type='text' onblur='GoYear(this);' size='3' style='height:18px;COLOR: " +sender.CF_Title + "; BACKGROUND-COLOR: " +sender.CBG_Title + "; BORDER-RIGHT: #ebebeb 1px solid; BORDER-TOP: #ebebeb 1px solid; BORDER-LEFT: #ebebeb 1px solid; BORDER-BOTTOM: #ebebeb 1px solid' value='" + (sender.Year-1911) + "'>";
146
var txtMonth = "<input type='text' onblur='GoMonth(this);' size='1' style='height:18px;COLOR: #FF0000; BACKGROUND-COLOR: " +sender.CBG_Title + "; BORDER-RIGHT: #ebebeb 1px solid; BORDER-TOP: #ebebeb 1px solid; BORDER-LEFT: #ebebeb 1px solid; BORDER-BOTTOM: #ebebeb 1px solid' value='" + getMonthText(sender.Month) + "'>";
147
strHead = "民國" + txtYear + "年 " + txtMonth + "月";
148
//strHead = "民國" + (sender.Year-1911) + "年 " + getMonthText(sender.Month) + "月";
149
}
150
else
151
{
152
var txtYear = "<input type='text' onblur='GoYear(this);'' size='4' style='height:18px;COLOR: " +sender.CF_Title + "; BACKGROUND-COLOR: " +sender.CBG_Title + "; BORDER-RIGHT: #ebebeb 1px solid; BORDER-TOP: #ebebeb 1px solid; BORDER-LEFT: #ebebeb 1px solid; BORDER-BOTTOM: #ebebeb 1px solid' value='" + (sender.Year) + "'>";
153
var txtMonth = "<input type='text' onblur='GoMonth(this);' size='2' style='height:18px;COLOR: #FF0000; BACKGROUND-COLOR: " +sender.CBG_Title + "; BORDER-RIGHT: #ebebeb 1px solid; BORDER-TOP: #ebebeb 1px solid; BORDER-LEFT: #ebebeb 1px solid; BORDER-BOTTOM: #ebebeb 1px solid' value='" + getMonthText(sender.Month) + "'>";
154
strHead = txtYear + " 年 " + txtMonth + "月";
155
//strHead = sender.Year + " 年 " + getMonthText(sender.Month) + "月";
156
}
157
cell.innerHTML = strHead;
158
//下一月
159
cell = row.insertCell(3);
160
cell.align = "center";
161
cell.style.color = sender.CF_Title;
162
cell.style.fontSize = sender.FZ_Title;
163
var pDate = new Date();
164
var cpDate = new Date(addDate(4,sender.EnableDay,pDate));
165
var preDate = new Date(sender.Year + "/" + sender.Month + "/" + GetMaxDay(sender));//cpDate.getDate());
166
var isNextMonth = false;
167
if(preDate<cpDate) isNextMonth = true;
168
if(sender.EnableDay<=0) isNextMonth = true;
169
uctrlA = document.createElement("A");
170
uctrlA.href="javascript:";
171
uctrlA.PUCtrl = sender;
172
uctrlA.onclick = NextMonth;
173
if(isNextMonth)
174
{
175
if(!sender.IsImg) uctrlA.innerHTML = "下月";
176
else CreateIMG(uctrlA,sender.IMG_NextMonth_Enabled);
177
cell.appendChild(uctrlA);
178
}
179
else
180
{
181
if(!sender.IsImg) cell.innerHTML = "下月";
182
CreateIMG(uctrlA,sender.IMG_NextMonth);
183
}
184
//下一年
185
cell = row.insertCell(4);
186
cell.align = "center";
187
cell.style.color = sender.CF_Title;
188
cell.style.fontSize = sender.FZ_Title;
189
uctrlA = document.createElement("A");
190
uctrlA.href="javascript:";
191
uctrlA.PUCtrl = sender;
192
uctrlA.onclick = NextYear;
193
if(sender.EnableDay<=0)
194
{
195
if(!sender.IsImg) uctrlA.innerHTML = "下年";
196
else CreateIMG(uctrlA,sender.IMG_NextYear);
197
}
198
cell.appendChild(uctrlA);
199
}
200
201
//創建星期
202
function CreateHead(sender,table)
203
{
204
var row = table.insertRow(table.rows.length);
205
row.bgColor = sender.CBG_Head;
206
for(var i=0; i<7; i++)
207
{
208
var cell = row.insertCell(i);
209
cell.style.color = sender.CF_Head;
210
cell.style.fontSize = sender.FZ_Head;
211
cell.style.width = sender.Width/7;
212
cell.align = "center";
213
cell.innerHTML = WeekName(sender,i);
214
}
215
}
216
217
//創建主體
218
function CreateBody(sender,table)
219
{
220
var curDate = new Date(sender.Year + "/" + sender.Month + "/1" );
221
var swk = curDate.getDay(); //取得當前月的第一天是星期幾
222
var row = table.insertRow(table.rows.length);
223
var dayID = 1;
224
225
//第一行
226
for(var i=0; i<swk; i++)
227
{
228
var cell = row.insertCell(i);
229
cell.align = "center";
230
cell.innerHTML = " ";
231
}
232
for(var i=swk; i<7; i++)
233
{
234
var cell = row.insertCell(i);
235
cell.align = "center";
236
EnableDay(sender,cell,dayID++,i);
237
}
238
//中間行
239
var lastDay = GetMaxDay(sender);
240
var rows = parseInt((lastDay-dayID+1) / 7);
241
for(var r=0; r<rows; r++)
242
{
243
row = table.insertRow(table.rows.length);
244
for(var i=0; i<7; i++)
245
{
246
var cell = row.insertCell(i);
247
cell.align = "center";
248
EnableDay(sender,cell,dayID++,i);
249
}
250
}
251
//最後行
252
if(dayID<=lastDay)
253
{
254
row = table.insertRow(table.rows.length);
255
var item = 0;
256
while(dayID<=lastDay)
257
{
258
item++;
259
var cell = row.insertCell(item-1);
260
cell.align = "center";
261
EnableDay(sender,cell,dayID++,item-1);
262
}
263
for(var i=0; i<7- item; i++)
264
{
265
var cell = row.insertCell(item+i);
266
cell.align = "center";
267
cell.innerHTML = " ";
268
}
269
}
270
271
}
272
273
//有效日期
274
function EnableDay(sender,cell,dayID,item)
275
{
276
var fontColor = sender.CF_Body_Enabled;
277
if(item==0 || item==6) fontColor = "#FF0000";
278
var curDate = new Date(sender.Year + "/" + sender.Month + "/" + dayID);
279
//var nowDate = new Date();
280
//nowDate = new Date(nowDate.getFullYear() + "/" + (nowDate.getMonth()+1) + "/" + nowDate.getDate());
281
var nowDate = new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);
282
if(sender.Year + "/" + sender.Month + "/" + dayID == nowDate.getFullYear() + "/" + (nowDate.getMonth()+1) + "/" + nowDate.getDate())
283
{
284
sender.currentTD = cell;
285
cell.style.backgroundColor = sender.CBG_Selected; //當前選中的字體背景色
286
cell.style.color = sender.CF_Body_Enabled;//有效的字體色
287
cell.style.fontSize = sender.FZ_Body;
288
cell.PUCtrl = sender;
289
cell.onclick = TD_OnClick;
290
cell.style.color = fontColor;
291
cell.innerHTML = dayID;
292
}
293
else if(curDate<nowDate)
294
{
295
if(sender.EnableDay<=0)
296
{
297
cell.onmouseover = TD_OnMouseOver;
298
cell.onmouseout = TD_OnMouseOut;
299
cell.PUCtrl = sender;
300
cell.onclick = TD_OnClick;
301
cell.style.backgroundColor = sender.CBG_Body_Enabled; //有效的背景色
302
cell.style.color = sender.CF_Body_Enabled;//有效的字體色
303
cell.style.fontSize = sender.FZ_Body;
304
cell.style.color = fontColor;
305
cell.innerHTML = dayID;
306
}
307
else
308
{
309
cell.style.backgroundColor = sender.CBG_Body; //無效的背景色
310
cell.style.color = sender.CF_Body;//無效的字體色
311
cell.style.fontSize = sender.FZ_Body;
312
cell.innerHTML = dayID;
313
}
314
}
315
else
316
{
317
nowDate.setDate(nowDate.getDate() + sender.EnableDay);
318
if(curDate>=nowDate)
319
{
320
if(sender.EnableDay<=0)
321
{
322
cell.onmouseover = TD_OnMouseOver;
323
cell.onmouseout = TD_OnMouseOut;
324
cell.PUCtrl = sender;
325
cell.onclick = TD_OnClick;
326
cell.style.backgroundColor = sender.CBG_Body_Enabled; //有效的背景色
327
cell.style.color = sender.CF_Body_Enabled;//有效的字體色
328
cell.style.fontSize = sender.FZ_Body;
329
cell.style.color = fontColor;
330
cell.innerHTML = dayID;
331
}
332
else
333
{
334
cell.style.backgroundColor = sender.CBG_Body; //無效的背景色
335
cell.style.color = sender.CF_Body;//無效的字體色
336
cell.style.fontSize = sender.FZ_Body;
337
cell.innerHTML = dayID;
338
}
339
}
340
else
341
{
342
cell.onmouseover = TD_OnMouseOver;
343
cell.onmouseout = TD_OnMouseOut;
344
cell.PUCtrl = sender;
345
cell.onclick = TD_OnClick;
346
cell.style.backgroundColor = sender.CBG_Body_Enabled; //有效的背景色
347
cell.style.color = sender.CF_Body_Enabled;//有效的字體色
348
cell.style.fontSize = sender.FZ_Body;
349
cell.style.color = fontColor;
350
cell.innerHTML = dayID;
351
352
}
353
354
}
355
}
356
357
function DeleteTable(sender)
358
{
359
sender.Parent.removeChild(document.getElementById(sender.ID + "_Table"));
360
}
361
362
///獲得當前日期
363
function GetDate()
364
{
365
if(this.TWDate)
366
{
367
return (this.Year-1911) + "-" + this.Month + "-" + this.currentTD.innerHTML;
368
}
369
else
370
{
371
return this.Year + "-" + this.Month + "-" + this.currentTD.innerHTML;
372
}
373
}
374
375
function NextYear()
376
{
377
sender = eval(this.PUCtrl);
378
var cDate = new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);
379
var strDate = addDate(6,1,cDate);
380
var curDate = new Date(strDate);
381
Init(sender,curDate);
382
DeleteTable(sender);
383
CreateTable(sender);
384
}
385
386
function NextMonth()
387
{
388
sender = eval(this.PUCtrl);
389
var cDate = new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);
390
var strDate = addDate(5,1,cDate);
391
var curDate = new Date(strDate);
392
Init(sender,curDate);
393
DeleteTable(sender);
394
CreateTable(sender);
395
}
396
397
function PreYear()
398
{
399
sender = eval(this.PUCtrl);
400
var cDate = new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);
401
var strDate = addDate(6,-1,cDate);
402
var curDate = new Date(strDate);
403
Init(sender,curDate);
404
DeleteTable(sender);
405
CreateTable(sender);
406
}
407
408
function PreMonth()
409
{
410
sender = eval(this.PUCtrl);
411
var cDate = new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);
412
var strDate = addDate(5,-1,cDate);
413
var curDate = new Date(strDate);
414
Init(sender,curDate);
415
DeleteTable(sender);
416
CreateTable(sender);
417
}
418
419
function GoYear()
420
{
421
var args = GoYear.arguments;
422
var uctrlYear = args[0];
423
var year = uctrlYear.value;
424
//alert(year);
425
//var td = uctrlYear.parentElement;
426
var td = uctrlYear.parentNode;
427
var sender = td.PUCtrl
428
429
if(sender.TWDate) year= parseInt(year)+1911;
430
var cDate = new Date( year + "/" + sender.Month + "/" + sender.Day);
431
Init(sender,cDate);
432
DeleteTable(sender);
433
CreateTable(sender);
434
}
435
436
function GoMonth()
437
{
438
var args = GoMonth.arguments;
439
var uctrlMonth = args[0];
440
//var td = uctrlMonth.parentElement;
441
var td = uctrlMonth.parentNode;
442
var sender = td.PUCtrl
443
if(parseInt(uctrlMonth.value)<1) uctrlMonth.value= 1;
444
if(parseInt(uctrlMonth.value)>12)uctrlMonth.value= 12;
445
var cDate = new Date(sender.Year + "/" + uctrlMonth.value + "/" + sender.Day);
446
Init(sender,cDate);
447
DeleteTable(sender);
448
CreateTable(sender);
449
}
450
451
function TD_OnMouseOver()
452
{
453
sender = eval(this.PUCtrl);
454
this.style.backgroundColor = sender.CBG_OnMouseOver;
455
this.style.cursor = "hand";
456
}
457
function TD_OnMouseOut()
458
{
459
sender = eval(this.PUCtrl);
460
if(sender.currentTD!=this)
461
this.style.backgroundColor = sender.CBG_Body_Enabled;
462
}
463
function TD_OnClick()
464
{
465
sender = eval(this.PUCtrl);
466
if(sender.currentTD!=this)
467
{
468
sender.currentTD.style.backgroundColor = sender.CBG_Body_Enabled;
469
sender.currentTD.style.color = sender.CF_Body_Enabled;
470
sender.currentTD = this;
471
sender.currentTD.style.backgroundColor = sender.CBG_Selected;
472
sender.currentTD.style.color = sender.CF_Selected;
473
}
474
if(sender.OnClick!=null)
475
sender.OnClick(sender,sender.Value());
476
//if(sender.BinderControl!=null)
477
// sender.BinderControl.value = sender.Value();
478
}
479
480
481
//獲得當前月的最大天數
482
function GetMaxDay(sender)
483
{
484
var iYear=sender.Year;
485
var iMonth=sender.Month;
486
switch(iMonth)
487
{
488
case 1:
489
case 3:
490
case 5:
491
case 7:
492
case 8:
493
case 10:
494
case 12:
495
return 31;
496
case 4:
497
case 6:
498
case 9:
499
case 11:
500
return 30;
501
case 2:
502
var d = new Date(iYear+"/2/29");
503
if(d.getMonth()==1) return 29;
504
else return 28
505
}
506
}
507
508
//返回星期
509
function WeekName(sender,id)
510
{
511
var weekName = "";
512
if(sender.TWDate)
513
{
514
switch(id)
515
{
516
case 0:
517
weekName = "日";
518
break;
519
case 1:
520
weekName = "一";
521
break;
522
case 2:
523
weekName = "二";
524
break;
525
case 3:
526
weekName = "三";
527
break;
528
case 4:
529
weekName = "四";
530
break;
531
case 5:
532
weekName = "五";
533
break;
534
case 6:
535
weekName = "六";
536
break;
537
}
538
}
539
else
540
{
541
switch(id)
542
{
543
case 0:
544
weekName = "Su";
545
break;
546
case 1:
547
weekName = "Mo";
548
break;
549
case 2:
550
weekName = "Tu";
551
break;
552
case 3:
553
weekName = "We";
554
break;
555
case 4:
556
weekName = "Th";
557
break;
558
case 5:
559
weekName = "Fr";
560
break;
561
case 6:
562
weekName = "Sat";
563
break;
564
}
565
}
566
return weekName;
567
}
568
569
//獲得月份
570
function getMonthText(iMonth)
571
{
572
573
switch(iMonth)
574
{
575
case 1:
576
return "1";
577
case 2:
578
return "2";
579
case 3:
580
return "3";
581
case 4:
582
return "4";
583
case 5:
584
return "5";
585
case 6:
586
return "6";
587
case 7:
588
return "7";
589
case 8:
590
return "8";
591
case 9:
592
return "9";
593
case 10:
594
return "10";
595
case 11:
596
return "11";
597
case 12:
598
return "12";
599
default:
600
return "";
601
}
602
}
603
604
//日期+
605
function addDate(type,NumDay,dtDate)
606
{
607
var date = new Date(dtDate)
608
type = parseInt(type)
609
lIntval = parseInt(NumDay)
610
switch(type)
611
{
612
case 6 ://年
613
date.setYear(date.getFullYear() + lIntval)
614
break;
615
case 7 : //季
616
date.setMonth(date.getMonth() + (lIntval * 3) )
617
break;
618
case 5 ://月
619
date.setMonth(date.getMonth() + lIntval)
620
break;
621
case 4 ://天
622
date.setDate(date.getDate() + lIntval)
623
break
624
case 3 ://時
625
date.setHours(date.getHours() + lIntval)
626
break
627
case 2 ://分
628
date.setMinutes(date.getMinutes() + lIntval)
629
break
630
case 1 ://秒
631
date.setSeconds(date.getSeconds() + lIntval)
632
break;
633
default:
634
}
635
return date.getFullYear() +'/' + (date.getMonth()+1) + '/' +date.getDate()+ ' '+ date.getHours()+':'+date.getMinutes()+':'+date.getSeconds();
636
}
637
638
//創建圖片
639
function CreateIMG(parentObj,src)
640
{
641
var uctrlImg = document.createElement("IMG");
642
uctrlImg.src = src;
643
uctrlImg.border = 0;
644
parentObj.appendChild(uctrlImg);
645
}

2

3
var siteName = "/Test2";//虛擬目錄名稱;只在顯示圖片(上一年,上一月,下一年,下一月)時有用4

5
//用戶控件日期6
function UCtrlDate()7
{8
this.ID = "UCtrlDate1";9
this.Width = "100%";10
this.Year = 0;11
this.Month = 0;12
this.Day = 0;13
this.Parent = document.body; //容器14
this.EnableDay = 0; //有效天數15
this.TWDate = true; //true表台灣日期, false表西元日期16
this.IsImg=true;//是否顯示圖片(上一年,上一月,下一年,下一月)17
this.currentTD = null; //當前TD18
this.Value = GetDate;19
20
//定義圖片21
this.IMG_NextMonth_Enabled = siteName +"/images/right.gif";22
this.IMG_NextMonth = siteName +"/images/right1.gif";23
this.IMG_PreMonth_Enabled = siteName +"/images/left.gif";24
this.IMG_PreMonth = siteName +"/images/left1.gif";25
this.IMG_NextYear = siteName +"/images/right.gif";26
this.IMG_PreYear = siteName +"/images/left.gif";27
//定義顏色28
this.CBG_Title = "#EEFFDD"; //標題背景色29
this.CF_Title = "#000000";//標題字體色30
this.CBG_Head = "#FFFFFF";//星期的背景色31
this.CF_Head = "#000000";//星期的字體色32
this.CBG_Body_Enabled = "#FFFFFF";//主體有效背景色33
this.CF_Body_Enabled = "#000000"//主體有效字體色34
this.CBG_Body = "#FFFFFF";//主體無效背景色35
this.CF_Body = "#CBCBCB"//主體無效字體色36
this.CBG_Selected = "#FFFF00";//當前被選中的背景色37
this.CF_Selected = "#000000";//當前被選中的字體色38
this.CBG_OnMouseOver = "#FFFF00"; //鼠標放上去的背景色39
//定義字體大小40
this.FZ_Title = "12px";//標題字體大小41
this.FZ_Head = "12px";//星期字體大小42
this.FZ_Body = "12px";//主體字體大小43
44
//代理45
this.OnClick = null;46

47
Init(this,new Date());48
this.OnLoad = CreateTable;49
}50

51
//初使化變量52
function Init(sender,curDate)53
{54
sender.Year = curDate.getFullYear();55
sender.Month = curDate.getMonth()+156
sender.Day = curDate.getDate();57

58
}59

60
//創建主體表格61
function CreateTable()62
{63
var args = CreateTable.arguments;64
var sender = null;65
if(args.length==1) sender = args[0];66
else sender = this;67
68
var ctDate = new Date();69
if(sender.Year==0) sender.Year = ctDate.getFullYear();70
if(sender.Month==0) sender.Month = ctDate.getMonth()+1;71
if(sender.Day==0) sender.Day = ctDate.getDate();72

73
var table = document.createElement("table");74
table.cellPadding=3;75
table.cellSpacing=0;76
table.rules="none";77
table.bordercolordark="#FFFFFF";78
table.borderColor = "#ebebeb";79
table.width = sender.Width;80
table.id = sender.ID + "_Table";81
table.border = 1;82
CreateCaption(sender,table);83
CreateHead(sender,table);84
CreateBody(sender,table);85
sender.Parent.appendChild(table);86
}87

88
//創建標題89
function CreateCaption(sender,table)90
{91
var row = table.insertRow(table.rows.length);92
row.bgColor = sender.CBG_Title;93
row.style.height="22px";94
95
//上一年96
var cell = row.insertCell(0);97
cell.align = "center";98
cell.style.color = sender.CF_Title;99
cell.style.fontSize = sender.FZ_Title;100
uctrlA = document.createElement("A");101
uctrlA.href="javascript:";102
uctrlA.PUCtrl = sender;103
uctrlA.onclick = PreYear;104
if(sender.EnableDay<=0)105
{106
if(!sender.IsImg) uctrlA.innerHTML = "上年";107
else CreateIMG(uctrlA,sender.IMG_PreYear);108
}109
cell.appendChild(uctrlA);110
//上一月111
var cell1 = row.insertCell(1);112
cell1.align = "center";113
cell1.style.color = sender.CF_Title;114
cell1.style.fontSize = sender.FZ_Title;115
var pDate = new Date();116
var preDate = new Date(sender.Year + "/" + sender.Month + "/" + pDate.getDate());117
var isShow = false;118
if(preDate>pDate) isShow = true;119
if(sender.EnableDay<=0) isShow = true;120
uctrlA = document.createElement("A");121
uctrlA.href="javascript:";122
uctrlA.PUCtrl = sender;123
uctrlA.onclick = PreMonth;124
if(isShow)125
{126
if(!sender.IsImg) uctrlA.innerHTML = "上月";127
else CreateIMG(uctrlA,sender.IMG_PreMonth_Enabled);128
cell1.appendChild(uctrlA);129
}130
else 131
{132
if(!sender.IsImg) cell1.innerHTML = "上月";133
CreateIMG(uctrlA,sender.IMG_PreMonth);134
}135
//顯示年月日136
cell = row.insertCell(2);137
cell.align = "center";138
cell.valign = "middle";139
cell.colSpan = 3;140
cell.style.color = sender.CF_Title;141
cell.style.fontSize = sender.FZ_Title;142
cell.PUCtrl = sender;143
if(sender.TWDate)144
{145
var txtYear = "<input type='text' onblur='GoYear(this);' size='3' style='height:18px;COLOR: " +sender.CF_Title + "; BACKGROUND-COLOR: " +sender.CBG_Title + "; BORDER-RIGHT: #ebebeb 1px solid; BORDER-TOP: #ebebeb 1px solid; BORDER-LEFT: #ebebeb 1px solid; BORDER-BOTTOM: #ebebeb 1px solid' value='" + (sender.Year-1911) + "'>";146
var txtMonth = "<input type='text' onblur='GoMonth(this);' size='1' style='height:18px;COLOR: #FF0000; BACKGROUND-COLOR: " +sender.CBG_Title + "; BORDER-RIGHT: #ebebeb 1px solid; BORDER-TOP: #ebebeb 1px solid; BORDER-LEFT: #ebebeb 1px solid; BORDER-BOTTOM: #ebebeb 1px solid' value='" + getMonthText(sender.Month) + "'>";147
strHead = "民國" + txtYear + "年 " + txtMonth + "月";148
//strHead = "民國" + (sender.Year-1911) + "年 " + getMonthText(sender.Month) + "月";149
}150
else151
{152
var txtYear = "<input type='text' onblur='GoYear(this);'' size='4' style='height:18px;COLOR: " +sender.CF_Title + "; BACKGROUND-COLOR: " +sender.CBG_Title + "; BORDER-RIGHT: #ebebeb 1px solid; BORDER-TOP: #ebebeb 1px solid; BORDER-LEFT: #ebebeb 1px solid; BORDER-BOTTOM: #ebebeb 1px solid' value='" + (sender.Year) + "'>";153
var txtMonth = "<input type='text' onblur='GoMonth(this);' size='2' style='height:18px;COLOR: #FF0000; BACKGROUND-COLOR: " +sender.CBG_Title + "; BORDER-RIGHT: #ebebeb 1px solid; BORDER-TOP: #ebebeb 1px solid; BORDER-LEFT: #ebebeb 1px solid; BORDER-BOTTOM: #ebebeb 1px solid' value='" + getMonthText(sender.Month) + "'>";154
strHead = txtYear + " 年 " + txtMonth + "月";155
//strHead = sender.Year + " 年 " + getMonthText(sender.Month) + "月";156
}157
cell.innerHTML = strHead;158
//下一月159
cell = row.insertCell(3);160
cell.align = "center";161
cell.style.color = sender.CF_Title;162
cell.style.fontSize = sender.FZ_Title;163
var pDate = new Date();164
var cpDate = new Date(addDate(4,sender.EnableDay,pDate));165
var preDate = new Date(sender.Year + "/" + sender.Month + "/" + GetMaxDay(sender));//cpDate.getDate());166
var isNextMonth = false;167
if(preDate<cpDate) isNextMonth = true;168
if(sender.EnableDay<=0) isNextMonth = true;169
uctrlA = document.createElement("A");170
uctrlA.href="javascript:";171
uctrlA.PUCtrl = sender;172
uctrlA.onclick = NextMonth;173
if(isNextMonth)174
{175
if(!sender.IsImg) uctrlA.innerHTML = "下月";176
else CreateIMG(uctrlA,sender.IMG_NextMonth_Enabled);177
cell.appendChild(uctrlA);178
}179
else 180
{181
if(!sender.IsImg) cell.innerHTML = "下月";182
CreateIMG(uctrlA,sender.IMG_NextMonth);183
}184
//下一年185
cell = row.insertCell(4);186
cell.align = "center";187
cell.style.color = sender.CF_Title;188
cell.style.fontSize = sender.FZ_Title;189
uctrlA = document.createElement("A");190
uctrlA.href="javascript:";191
uctrlA.PUCtrl = sender;192
uctrlA.onclick = NextYear;193
if(sender.EnableDay<=0)194
{195
if(!sender.IsImg) uctrlA.innerHTML = "下年";196
else CreateIMG(uctrlA,sender.IMG_NextYear);197
}198
cell.appendChild(uctrlA);199
}200

201
//創建星期202
function CreateHead(sender,table)203
{204
var row = table.insertRow(table.rows.length);205
row.bgColor = sender.CBG_Head;206
for(var i=0; i<7; i++)207
{208
var cell = row.insertCell(i);209
cell.style.color = sender.CF_Head;210
cell.style.fontSize = sender.FZ_Head;211
cell.style.width = sender.Width/7;212
cell.align = "center";213
cell.innerHTML = WeekName(sender,i);214
}215
}216

217
//創建主體218
function CreateBody(sender,table)219
{220
var curDate = new Date(sender.Year + "/" + sender.Month + "/1" );221
var swk = curDate.getDay(); //取得當前月的第一天是星期幾222
var row = table.insertRow(table.rows.length);223
var dayID = 1;224
225
//第一行226
for(var i=0; i<swk; i++)227
{228
var cell = row.insertCell(i);229
cell.align = "center";230
cell.innerHTML = " ";231
}232
for(var i=swk; i<7; i++)233
{234
var cell = row.insertCell(i);235
cell.align = "center";236
EnableDay(sender,cell,dayID++,i);237
}238
//中間行239
var lastDay = GetMaxDay(sender);240
var rows = parseInt((lastDay-dayID+1) / 7);241
for(var r=0; r<rows; r++)242
{243
row = table.insertRow(table.rows.length);244
for(var i=0; i<7; i++)245
{246
var cell = row.insertCell(i);247
cell.align = "center";248
EnableDay(sender,cell,dayID++,i);249
}250
}251
//最後行252
if(dayID<=lastDay)253
{254
row = table.insertRow(table.rows.length);255
var item = 0;256
while(dayID<=lastDay)257
{258
item++;259
var cell = row.insertCell(item-1);260
cell.align = "center";261
EnableDay(sender,cell,dayID++,item-1);262
}263
for(var i=0; i<7- item; i++)264
{265
var cell = row.insertCell(item+i);266
cell.align = "center";267
cell.innerHTML = " ";268
}269
}270

271
}272

273
//有效日期274
function EnableDay(sender,cell,dayID,item)275
{276
var fontColor = sender.CF_Body_Enabled;277
if(item==0 || item==6) fontColor = "#FF0000";278
var curDate = new Date(sender.Year + "/" + sender.Month + "/" + dayID);279
//var nowDate = new Date();280
//nowDate = new Date(nowDate.getFullYear() + "/" + (nowDate.getMonth()+1) + "/" + nowDate.getDate());281
var nowDate = new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);282
if(sender.Year + "/" + sender.Month + "/" + dayID == nowDate.getFullYear() + "/" + (nowDate.getMonth()+1) + "/" + nowDate.getDate())283
{284
sender.currentTD = cell;285
cell.style.backgroundColor = sender.CBG_Selected; //當前選中的字體背景色286
cell.style.color = sender.CF_Body_Enabled;//有效的字體色287
cell.style.fontSize = sender.FZ_Body;288
cell.PUCtrl = sender;289
cell.onclick = TD_OnClick;290
cell.style.color = fontColor;291
cell.innerHTML = dayID;292
}293
else if(curDate<nowDate)294
{295
if(sender.EnableDay<=0)296
{297
cell.onmouseover = TD_OnMouseOver;298
cell.onmouseout = TD_OnMouseOut;299
cell.PUCtrl = sender;300
cell.onclick = TD_OnClick;301
cell.style.backgroundColor = sender.CBG_Body_Enabled; //有效的背景色302
cell.style.color = sender.CF_Body_Enabled;//有效的字體色303
cell.style.fontSize = sender.FZ_Body;304
cell.style.color = fontColor;305
cell.innerHTML = dayID;306
}307
else308
{309
cell.style.backgroundColor = sender.CBG_Body; //無效的背景色310
cell.style.color = sender.CF_Body;//無效的字體色311
cell.style.fontSize = sender.FZ_Body;312
cell.innerHTML = dayID;313
}314
}315
else316
{317
nowDate.setDate(nowDate.getDate() + sender.EnableDay);318
if(curDate>=nowDate)319
{320
if(sender.EnableDay<=0)321
{322
cell.onmouseover = TD_OnMouseOver;323
cell.onmouseout = TD_OnMouseOut;324
cell.PUCtrl = sender;325
cell.onclick = TD_OnClick;326
cell.style.backgroundColor = sender.CBG_Body_Enabled; //有效的背景色327
cell.style.color = sender.CF_Body_Enabled;//有效的字體色328
cell.style.fontSize = sender.FZ_Body;329
cell.style.color = fontColor;330
cell.innerHTML = dayID;331
}332
else333
{334
cell.style.backgroundColor = sender.CBG_Body; //無效的背景色335
cell.style.color = sender.CF_Body;//無效的字體色336
cell.style.fontSize = sender.FZ_Body;337
cell.innerHTML = dayID;338
}339
}340
else341
{342
cell.onmouseover = TD_OnMouseOver;343
cell.onmouseout = TD_OnMouseOut;344
cell.PUCtrl = sender;345
cell.onclick = TD_OnClick;346
cell.style.backgroundColor = sender.CBG_Body_Enabled; //有效的背景色347
cell.style.color = sender.CF_Body_Enabled;//有效的字體色348
cell.style.fontSize = sender.FZ_Body;349
cell.style.color = fontColor;350
cell.innerHTML = dayID;351

352
}353
354
}355
}356

357
function DeleteTable(sender)358
{359
sender.Parent.removeChild(document.getElementById(sender.ID + "_Table"));360
}361

362
///獲得當前日期363
function GetDate()364
{365
if(this.TWDate)366
{367
return (this.Year-1911) + "-" + this.Month + "-" + this.currentTD.innerHTML;368
}369
else370
{371
return this.Year + "-" + this.Month + "-" + this.currentTD.innerHTML;372
}373
}374

375
function NextYear()376
{377
sender = eval(this.PUCtrl);378
var cDate = new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);379
var strDate = addDate(6,1,cDate);380
var curDate = new Date(strDate);381
Init(sender,curDate);382
DeleteTable(sender);383
CreateTable(sender);384
}385

386
function NextMonth()387
{388
sender = eval(this.PUCtrl);389
var cDate = new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);390
var strDate = addDate(5,1,cDate);391
var curDate = new Date(strDate);392
Init(sender,curDate);393
DeleteTable(sender);394
CreateTable(sender);395
}396

397
function PreYear()398
{399
sender = eval(this.PUCtrl);400
var cDate = new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);401
var strDate = addDate(6,-1,cDate);402
var curDate = new Date(strDate);403
Init(sender,curDate);404
DeleteTable(sender);405
CreateTable(sender);406
}407

408
function PreMonth()409
{410
sender = eval(this.PUCtrl);411
var cDate = new Date(sender.Year + "/" + sender.Month + "/" + sender.Day);412
var strDate = addDate(5,-1,cDate);413
var curDate = new Date(strDate);414
Init(sender,curDate);415
DeleteTable(sender);416
CreateTable(sender);417
}418

419
function GoYear()420
{421
var args = GoYear.arguments;422
var uctrlYear = args[0];423
var year = uctrlYear.value;424
//alert(year);425
//var td = uctrlYear.parentElement;426
var td = uctrlYear.parentNode;427
var sender = td.PUCtrl428
429
if(sender.TWDate) year= parseInt(year)+1911;430
var cDate = new Date( year + "/" + sender.Month + "/" + sender.Day);431
Init(sender,cDate);432
DeleteTable(sender);433
CreateTable(sender);434
}435

436
function GoMonth()437
{438
var args = GoMonth.arguments;439
var uctrlMonth = args[0];440
//var td = uctrlMonth.parentElement;441
var td = uctrlMonth.parentNode;442
var sender = td.PUCtrl443
if(parseInt(uctrlMonth.value)<1) uctrlMonth.value= 1;444
if(parseInt(uctrlMonth.value)>12)uctrlMonth.value= 12;445
var cDate = new Date(sender.Year + "/" + uctrlMonth.value + "/" + sender.Day);446
Init(sender,cDate);447
DeleteTable(sender);448
CreateTable(sender);449
}450

451
function TD_OnMouseOver()452
{453
sender = eval(this.PUCtrl);454
this.style.backgroundColor = sender.CBG_OnMouseOver;455
this.style.cursor = "hand";456
}457
function TD_OnMouseOut()458
{459
sender = eval(this.PUCtrl);460
if(sender.currentTD!=this)461
this.style.backgroundColor = sender.CBG_Body_Enabled;462
}463
function TD_OnClick()464
{465
sender = eval(this.PUCtrl);466
if(sender.currentTD!=this)467
{468
sender.currentTD.style.backgroundColor = sender.CBG_Body_Enabled;469
sender.currentTD.style.color = sender.CF_Body_Enabled;470
sender.currentTD = this;471
sender.currentTD.style.backgroundColor = sender.CBG_Selected;472
sender.currentTD.style.color = sender.CF_Selected;473
}474
if(sender.OnClick!=null) 475
sender.OnClick(sender,sender.Value());476
//if(sender.BinderControl!=null)477
// sender.BinderControl.value = sender.Value();478
}479

480

481
//獲得當前月的最大天數482
function GetMaxDay(sender)483
{484
var iYear=sender.Year;485
var iMonth=sender.Month;486
switch(iMonth)487
{488
case 1:489
case 3:490
case 5:491
case 7:492
case 8:493
case 10:494
case 12:495
return 31;496
case 4:497
case 6:498
case 9:499
case 11:500
return 30;501
case 2:502
var d = new Date(iYear+"/2/29");503
if(d.getMonth()==1) return 29;504
else return 28505
}506
}507

508
//返回星期509
function WeekName(sender,id)510
{511
var weekName = "";512
if(sender.TWDate)513
{514
switch(id)515
{516
case 0:517
weekName = "日";518
break;519
case 1:520
weekName = "一";521
break;522
case 2:523
weekName = "二";524
break;525
case 3:526
weekName = "三";527
break;528
case 4:529
weekName = "四";530
break;531
case 5:532
weekName = "五";533
break;534
case 6:535
weekName = "六";536
break;537
}538
}539
else540
{541
switch(id)542
{543
case 0:544
weekName = "Su";545
break;546
case 1:547
weekName = "Mo";548
break;549
case 2:550
weekName = "Tu";551
break;552
case 3:553
weekName = "We";554
break;555
case 4:556
weekName = "Th";557
break;558
case 5:559
weekName = "Fr";560
break;561
case 6:562
weekName = "Sat";563
break;564
}565
}566
return weekName;567
}568

569
//獲得月份570
function getMonthText(iMonth)571
{572

573
switch(iMonth)574
{575
case 1:576
return "1";577
case 2:578
return "2";579
case 3:580
return "3";581
case 4:582
return "4";583
case 5:584
return "5";585
case 6:586
return "6";587
case 7:588
return "7";589
case 8:590
return "8";591
case 9:592
return "9";593
case 10:594
return "10";595
case 11:596
return "11";597
case 12:598
return "12";599
default:600
return "";601
}602
}603

604
//日期+605
function addDate(type,NumDay,dtDate)606
{607
var date = new Date(dtDate)608
type = parseInt(type) 609
lIntval = parseInt(NumDay)610
switch(type)611
{612
case 6 ://年613
date.setYear(date.getFullYear() + lIntval)614
break;615
case 7 : //季616
date.setMonth(date.getMonth() + (lIntval * 3) )617
break;618
case 5 ://月619
date.setMonth(date.getMonth() + lIntval)620
break;621
case 4 ://天622
date.setDate(date.getDate() + lIntval)623
break624
case 3 ://時625
date.setHours(date.getHours() + lIntval)626
break627
case 2 ://分628
date.setMinutes(date.getMinutes() + lIntval)629
break630
case 1 ://秒631
date.setSeconds(date.getSeconds() + lIntval)632
break;633
default:634
} 635
return date.getFullYear() +'/' + (date.getMonth()+1) + '/' +date.getDate()+ ' '+ date.getHours()+':'+date.getMinutes()+':'+date.getSeconds();636
}637
638
//創建圖片639
function CreateIMG(parentObj,src)640
{641
var uctrlImg = document.createElement("IMG");642
uctrlImg.src = src;643
uctrlImg.border = 0;644
parentObj.appendChild(uctrlImg);645
}2. 調用:
1
<html>
2
<head>
3
<title></title>
4
<script language="javascript" src="UCtrl_Date.js"></script>
5
<base target="_self" />
6
<script language=javascript>
7
<!--
8
window.onload = Page_Load;
9
function Page_Load()
10
{
11
var selDate = new UCtrlDate(); //創建日期對象
12
selDate.Width = 300; //寬
13
selDate.CBG_Title = "#ebeb99";
14
selDate.CBG_Head = "#EBEBEB";
15
selDate.ID = "DateTim1"; //控件ID
16
selDate.Year = 2003; //控件年,不指定為當前年
17
selDate.Month = 4;//控件月,不指定為當前月
18
selDate1Day = 26;//控件日,不指定為當前日
19
selDate.IsImg = false; //是否顯示圖片(上下年月)
20
//selDate.EnableDay = 45;//控件從指定日期開始,向後多少天可以被選,默認為所有
21
//selDate.Parent = document.all("RQ"); //控件放在哪個容器裡,無指定為body中
22
//selDate.TWDate = false; //false為西元日期,默認為台灣日期
23
selDate.OnClick = AA; //控件上單擊日期時所執行的方法,參數為所選中的日期
24
selDate.OnLoad(); //加載控件
25
}
26
//控件上單擊日期時所執行的方法,參數為所選中的日期
27
function AA(date)
28
{
29
window.returnValue = date;
30
self.close();
31
32
}
33
//-->
34
</script>
35
</head>
36
<body leftmargin="0" rightmargin="0" topmargin="0" bottommargin="0">
37
</body>
38
</html>
3.顯示如圖
<html>2
<head>3
<title></title>4
<script language="javascript" src="UCtrl_Date.js"></script>5
<base target="_self" />6
<script language=javascript>7
<!--8
window.onload = Page_Load;9
function Page_Load()10
{11
var selDate = new UCtrlDate(); //創建日期對象12
selDate.Width = 300; //寬13
selDate.CBG_Title = "#ebeb99"; 14
selDate.CBG_Head = "#EBEBEB";15
selDate.ID = "DateTim1"; //控件ID16
selDate.Year = 2003; //控件年,不指定為當前年17
selDate.Month = 4;//控件月,不指定為當前月18
selDate1Day = 26;//控件日,不指定為當前日19
selDate.IsImg = false; //是否顯示圖片(上下年月)20
//selDate.EnableDay = 45;//控件從指定日期開始,向後多少天可以被選,默認為所有21
//selDate.Parent = document.all("RQ"); //控件放在哪個容器裡,無指定為body中22
//selDate.TWDate = false; //false為西元日期,默認為台灣日期23
selDate.OnClick = AA; //控件上單擊日期時所執行的方法,參數為所選中的日期24
selDate.OnLoad(); //加載控件25
}26
//控件上單擊日期時所執行的方法,參數為所選中的日期27
function AA(date)28
{29
window.returnValue = date;30
self.close();31
32
}33
//-->34
</script>35
</head>36
<body leftmargin="0" rightmargin="0" topmargin="0" bottommargin="0">37
</body>38
</html>
4. 如加上下面的文件
1
2
var curDateObject = null; //當前日期對象(div)
3
var curDate = new Date();
4
var divName = "DivDate" + curDate.getFullYear() + curDate.getMonth() + curDate.getDate();
5
6
function OpenDate(txtCtrl)
7
{
8
var curDivName = txtCtrl.id + "_" + divName
9
if(curDateObject==null || curDateObject.id!=curDivName)
10
{
11
var div_Date = "<div style=\"Z-INDEX: 100; LEFT: 0px; POSITION: absolute; TOP: 0px; WIDTH: 300px;\" id='" + curDivName +"' ></div>";
12
document.body.insertAdjacentHTML("afterBegin",div_Date);
13
LoadDate811019(curDivName,txtCtrl);
14
document.all(curDivName).style.left =txtCtrl.offsetLeft;
15
document.all(curDivName).style.top =txtCtrl.offsetTop+txtCtrl.offsetHeight;
16
17
curDateObject = document.all(curDivName);
18
}
19
}
20
21
function LoadDate811019(curDivName,txtCtrl)
22
{
23
var txtDate = new UCtrlDate();
24
txtDate.Width = 260;
25
txtDate.TWDate = false;
26
txtDate.Parent = document.all(curDivName);
27
txtDate.ID = "DateTimeTXT";
28
txtDate.OnClick = DelegateMethod;
29
txtDate.curDivName = curDivName;
30
txtDate.TXTCtrl = txtCtrl;
31
if(txtCtrl.value!="")
32
{
33
var ymd = txtCtrl.value;
34
var dt = ymd.split(" ");
35
ymd = dt[0];
36
ymd = ymd.replace("/","-");
37
ymds = ymd.split("-");
38
var y = parseInt(ymds[0]);
39
var m = parseInt(ymds[1]);
40
var d = parseInt(ymds[2]);
41
if(txtDate.TWDate) y = y+1911;
42
txtDate.Year = y;
43
txtDate.Month = m;
44
txtDate.Day = d;
45
}
46
txtDate.OnLoad();
47
}
48
49
function DelegateMethod(sender,date)
50
{
51
sender.TXTCtrl.value = date;
52
document.body.removeChild(document.getElementById(sender.curDivName));
53
curDateObject = null;
54
}
55
56
document.onmousedown = CheckSelectObject;
57
function CheckSelectObject()
58
{
59
var doObject = curDateObject;
60
if(doObject!=null)
61
{
62
var isClick = false;
63
var curObject = event.srcElement;
64
if(curObject != null)
65
{
66
var parentObject = curObject.parentElement;
67
while(parentObject!=null)
68
{
69
if(parentObject == doObject)
70
{
71
isClick = true;
72
break;
73
}
74
parentObject = parentObject.parentElement;
75
}
76
}
77
if(!isClick)
78
{
79
document.body.removeChild(doObject);
80
curDateObject = null;
81
}
82
}
83
}
84

2
var curDateObject = null; //當前日期對象(div)3
var curDate = new Date();4
var divName = "DivDate" + curDate.getFullYear() + curDate.getMonth() + curDate.getDate();5
6
function OpenDate(txtCtrl)7
{8
var curDivName = txtCtrl.id + "_" + divName9
if(curDateObject==null || curDateObject.id!=curDivName)10
{11
var div_Date = "<div style=\"Z-INDEX: 100; LEFT: 0px; POSITION: absolute; TOP: 0px; WIDTH: 300px;\" id='" + curDivName +"' ></div>";12
document.body.insertAdjacentHTML("afterBegin",div_Date);13
LoadDate811019(curDivName,txtCtrl);14
document.all(curDivName).style.left =txtCtrl.offsetLeft;15
document.all(curDivName).style.top =txtCtrl.offsetTop+txtCtrl.offsetHeight;16
17
curDateObject = document.all(curDivName);18
}19
}20

21
function LoadDate811019(curDivName,txtCtrl)22
{23
var txtDate = new UCtrlDate();24
txtDate.Width = 260;25
txtDate.TWDate = false;26
txtDate.Parent = document.all(curDivName);27
txtDate.ID = "DateTimeTXT";28
txtDate.OnClick = DelegateMethod;29
txtDate.curDivName = curDivName;30
txtDate.TXTCtrl = txtCtrl;31
if(txtCtrl.value!="")32
{33
var ymd = txtCtrl.value;34
var dt = ymd.split(" ");35
ymd = dt[0];36
ymd = ymd.replace("/","-");37
ymds = ymd.split("-");38
var y = parseInt(ymds[0]);39
var m = parseInt(ymds[1]);40
var d = parseInt(ymds[2]);41
if(txtDate.TWDate) y = y+1911;42
txtDate.Year = y;43
txtDate.Month = m;44
txtDate.Day = d;45
}46
txtDate.OnLoad();47
}48

49
function DelegateMethod(sender,date)50
{51
sender.TXTCtrl.value = date;52
document.body.removeChild(document.getElementById(sender.curDivName));53
curDateObject = null;54
}55

56
document.onmousedown = CheckSelectObject;57
function CheckSelectObject()58
{59
var doObject = curDateObject;60
if(doObject!=null)61
{62
var isClick = false;63
var curObject = event.srcElement;64
if(curObject != null)65
{66
var parentObject = curObject.parentElement;67
while(parentObject!=null)68
{69
if(parentObject == doObject)70
{71
isClick = true;72
break;73
}74
parentObject = parentObject.parentElement;75
}76
}77
if(!isClick)78
{79
document.body.removeChild(doObject);80
curDateObject = null;81
}82
}83
}84

5.現在就可以直接調用了,且效果認為比上面的還要好些
<input type="text" id="ShowDate1" name="ShowDate1" onfocus="OpenDate(this)" value="2006-06-07" readonly />

即當鼠標放在文本框中時顯示日期控件,單擊所選日期後,文本框獲得日期,關閉日期控件


浙公网安备 33010602011771号