項目中用到一個級聯、動態下拉選擇日期框。我以前也收集過關于地區級聯的,那時候是用別人代碼。今天這個雖然簡單但感覺自己還是進步滿大,最起碼是自己親手寫出來的。o(∩_∩)o...哈哈
???首先是php代碼生成一個年月日的下拉組件。
?1
<?
php
?2
????
echo
?
"
<select?id=\
""
.$statement.
"
_year\
"
?onchange=\
"
resetDate(
'
".$statement."
'
)\
"
?disabled>
"
;
?3
????
for
(
$i
=
2003
;
$i
<=
2015
;
$i
++
)
?4
????{
?5
????????
if
(
$i
==
2003
)
?6
????????{
?7
????????????
echo
?
"
<option?value=\
""
.$i.
"
\
""
.
"
?selected>
"
.
$i
.
"
</option>
"
;
?8
????????}
?9
????????
else
10
????????{
11
????????????
echo
?
"
<option?value=\
""
.$i.
"
\
"
>
"
.
$i
.
"
</option>
"
;????
12
????????}
13
????}
14
????
echo
?
"
</select>年
"
;
15
????
echo
?
"
<select?id=\
""
.$statement.
"
_month\
"
?onchange=\
"
resetDate(
'
".$statement."
'
)\
"
?disabled>
"
;
16
????
for
(
$i
=
1
;
$i
<=
12
;
$i
++
)
17
????{
18
????????
if
(
$i
==
1
)
19
????????{
20
????????????
echo
?
"
<option?value=\
""
.$i.
"
\
""
.
"
?selected>
"
.
$i
.
"
</option>
"
;
21
????????}
22
????????
else
23
????????{
24
????????????
echo
?
"
<option?value=\
""
.$i.
"
\
"
>
"
.
$i
.
"
</option>
"
;????
25
????????}
26
????}
27
????
echo
?
"
</select>月
"
;
28
????
echo
?
"
<select?id=\
""
.$statement.
"
_day\
"
?disabled>
"
;
29
????
for
(
$i
=
1
;
$i
<=
28
;
$i
++
)
30
????{
31
????????
if
(
$i
==
1
)
32
????????{
33
????????????
echo
?
"
<option?value=\
""
.$i.
"
\
""
.
"
?selected>
"
.
$i
.
"
</option>
"
;
34
????????}
35
????????
else
36
????????{
37
????????????
echo
?
"
<option?value=\
""
.$i.
"
\
"
>
"
.
$i
.
"
</option>
"
;????
38
????????}
39
????}
40
????
echo
?
"
</select>日
"
;
41
?>
42

?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

也許你已經發現了,組件的ID我用了一個動態的。但是更讓你氣氛的是我居然把2月的日期都只寫了28天。(其實應該寫31天,必定默認選擇的是1月吧)(難道是防止閏年2月用戶卻選擇29,甚至選擇30、31?)哈哈,你誤會了。請看下面的javascript代碼。
?1
/**//*
?2
?*?@breif:?根據月份?以及年份調整日期的下拉選擇天數
?3
?*?
?4
?*/
?5
function?changDay(obj)
?6

{
?7
????var?year_id?=?obj+"_year";
?8
????var?month_id?=?obj+"_month";
?9
????var?day_id?=?obj+"_day";
10
????var?year?=?Arr_year[parseInt(document.getElementById(year_id).selectedIndex)];
11
????var?month?=?Arr_month[parseInt(document.getElementById(month_id).selectedIndex)];
12
????//獲取下拉框
13
????var?select?=?document.getElementById(day_id);
14
????//獲取下拉框列表
15
????var?options??=?document.getElementById(day_id).options;
16
????var?len?=?options.length;
17
????//大月情況,即有31號
18
????if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
19
????
{
20
????????while(len<31)
21
????????
{
22
????????????//增加一個元素
23
????????????options[len]=new?Option(len+1,len+1);
24
????????????len++;
25
????????}
26
????}
27
????else?if(month==4||month==6||month==9||month==11)//小月,但不為2月
28
????
{
29
????????while(len<30)
30
????????
{
31
????????????//增加一個元素
32
????????????options[len]=new?Option(len+1,len+1);????????????
33
????????????len++;
34
????????}
35
????????while(len>30)
36
????????
{
37
????????????//刪除一個元素
38
????????????select.remove(len-1);
39
????????????len--;
40
????????}
41
????}
42
????else?if(month==2&&(year%4==0&&year%100!=0||year%400==0))
43
????
{
44
????????while(len>28)
45
????????
{
46
????????????//刪除一個元素
47
????????????select.remove(len-1);
48
????????????len--;
49
????????}
50
????}else
51
????
{
52
????????while(len<29)
53
????????
{
54
????????????//增加一個元素
55
????????????options[len]=new?Option(len+1,len+1);????????????
56
????????????len++;
57
????????}
58
????????while(len>29)
59
????????
{
60
????????????//刪除一個元素
61
????????????select.remove(len-1);
62
????????????len--;
63
????????}
64
????}
65
}
66
/**//*
67
?*?@breif:?選擇年份?或者月份后?重置日期為1
68
?*/
69
function?resetDate(obj)
70

{
71
????var?state_Flag?=?obj+"_day";
72
????document.getElementById(state_Flag).selectedIndex=0;
73
????changDay(obj);
74
}


?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

這里利用了簡單的dom編程,根據年月來通過事件動態增刪下拉列表選擇組件。
最近到處問級聯怎么寫的人不少。實際上我這里只是我寫的一個簡單的算法,你大可不必想這么細,想想方法,知道怎么來著就ok了。
比如我就在寫這篇博客的時候想到用ajax,動態取數據,那時候用ajax不是試過動態替換div嘛,當然也可以替換option原色的。但是總不適合刷新頁面的,所以用腳本或者ajax比較正常。
當然我們下拉框也許不多。比我的這種。那么我們還可以同時放幾個select組件在那里,然后根據事件(即用戶對其他選項的操作)控制其是否顯示或者不顯示哪個select。
大家可以談論啊。不一定要什么太專業,我們可以有很多想法,有不同的想法,也希望大家分享,賜教。
ps:記得從前有人參加計算機考試,題目是讓寫程輸出:(大概意思了吧)
*
**
***
****
*****
(也許沒有這么規則,大概是要求用某種算法的形式。)
1. 有人用了比較傳統的書上方法
2. 我當時用了一個字符串“*****”循環打印其子串;
3. 不過有一哥們,直接就是:
system.out.println("*");
system.out.println("*"*);
……
事后,誰能說他是錯的(相反我覺得那小子不錯!),老師一定滿無奈的(當時不是學了)。(o(∩_∩)o...哈哈)必定那不是他考題的目的吧。