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. 調用:

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

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

5

6

7



8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53



54

55

56

57

58

59

60

61

62



63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90



91

92

93

94

95

96

97

98

99

100

101

102

103

104

105



106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125



126

127

128

129

130

131



132

133

134

135

136

137

138

139

140

141

142

143

144



145

146

147

148

149

150

151



152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174



175

176

177

178

179

180



181

182

183

184

185

186

187

188

189

190

191

192

193

194



195

196

197

198

199

200

201

202

203



204

205

206

207



208

209

210

211

212

213

214

215

216

217

218

219



220

221

222

223

224

225

226

227



228

229

230

231

232

233



234

235

236

237

238

239

240

241

242



243

244

245



246

247

248

249

250

251

252

253



254

255

256

257



258

259

260

261

262

263

264



265

266

267

268

269

270

271

272

273

274

275



276

277

278

279

280

281

282

283



284

285

286

287

288

289

290

291

292

293

294



295

296



297

298

299

300

301

302

303

304

305

306

307

308



309

310

311

312

313

314

315

316



317

318

319



320

321



322

323

324

325

326

327

328

329

330

331

332

333



334

335

336

337

338

339

340

341



342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358



359

360

361

362

363

364



365

366



367

368

369

370



371

372

373

374

375

376



377

378

379

380

381

382

383

384

385

386

387



388

389

390

391

392

393

394

395

396

397

398



399

400

401

402

403

404

405

406

407

408

409



410

411

412

413

414

415

416

417

418

419

420



421

422

423

424

425

426

427

428

429

430

431

432

433

434

435

436

437



438

439

440

441

442

443

444

445

446

447

448

449

450

451

452



453

454

455

456

457

458



459

460

461

462

463

464



465

466

467



468

469

470

471

472

473

474

475

476

477

478

479

480

481

482

483



484

485

486

487



488

489

490

491

492

493

494

495

496

497

498

499

500

501

502

503

504

505

506

507

508

509

510



511

512

513



514

515



516

517

518

519

520

521

522

523

524

525

526

527

528

529

530

531

532

533

534

535

536

537

538

539

540



541

542



543

544

545

546

547

548

549

550

551

552

553

554

555

556

557

558

559

560

561

562

563

564

565

566

567

568

569

570

571



572

573

574



575

576

577

578

579

580

581

582

583

584

585

586

587

588

589

590

591

592

593

594

595

596

597

598

599

600

601

602

603

604

605

606



607

608

609

610

611



612

613

614

615

616

617

618

619

620

621

622

623

624

625

626

627

628

629

630

631

632

633

634

635

636

637

638

639

640



641

642

643

644

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.顯示如圖
2

3

4

5

6



7

8

9

10



11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28



29

30

31

32

33

34

35

36

37

38


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

3

4

5

6

7



8

9

10



11

12

13

14

15

16

17

18

19

20

21

22



23

24

25

26

27

28

29

30

31

32



33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50



51

52

53

54

55

56

57

58



59

60

61



62

63

64

65



66

67

68



69

70



71

72

73

74

75

76

77

78



79

80

81

82

83

84

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

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