三级菜单
1<select id="bxdw" name="bxdw" onchange="check_select()">
2<option>请选择部门</option>
3</select>
1<select id="bxr" name="bxr" onchange="check_dm()">
2<option value="">请选择员工</option>
3
4<select id="bxsb" name="bxsb"> <option value="">请选择设备</option>
5</select>
6<input onclick="Javascript:check_all();" type="button"/> 全部设备
7
8
9怎么实现
10\---------------------------------------------------------------
11
12用asp+javascript实现动态数据联动,不刷新
13
14转贴:Andy.m 日期:2003-08-29 人气:56
15/////////////by xxrl(孔曰成仁,孟曰取E)
16
17/////////////Chinese:蒋健华
18
19/////////////email:[email protected]
20
21联动,联动,联动。。。。困扰了好多网友的神经,在CSDN-ASP板块中,总是看到网友们大呼救命,救什么?联动!为什么联动这样受到关注,其实用性无可非议,用户也能认可,可是如果数据是大量并相互关联的,那问题就来了,怎么识别并显示是一个很苦恼的问题。那究竟有没有一个很好的解决办法呢?答案是肯定的,因为我们有asp和javascript,哈哈,那么我们就开始行动吧!
22
23我们要获得的数据,既然要达到联动的效果,肯定这些数据是有关联的,那么我们用这样的实例来说明我们的方法
24
25准备条件:
26
27SQL SERVER 2000 中文企业版,IIS5.0+,IE5.0+,当然,最好有一个好的编辑器,VS.NET就不错,当然,如果你是记事本的拥护者,那我也没办法。L
28
29我们以人事管理中的部门级别进行联动方法的说明,认识管理中的部门级别可以这样定义,也是实际企业的定义规则,**化工厂/**系统/**部,举例说明就是
30
31××化工厂/营销系统/市场部,在文中,FirstOrganization表对应的是”××化工厂”,SecondOrganization对应的是”营销系统”,ThirdOrganization对应的是”市场部”
32
33
34
35在SQL SERVER 2000中新建两个表,或者三个表,为了我们能更大限度的发挥联动的功能,我们建三个表,呵呵。
36
37数据库名称:xxrl_STUDY,用户名xxrl_STUDY,密码xxrl_STUDY
38
39接着建ODBC数据源,你也可以不用,但我这样用,呵呵
40
41ODBC名:xxrl_ ODBC,用用户名xxrl_STUDY,密码xxrl_STUDY连接,指向xxrl_STUDY数据库,默认中文设置,测试――>ok
42
43新建表:
44
45第一个表FirstOrganization
46
47SQL脚本如下:
48
49if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FirstOrganization]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
50
51drop table [dbo].[FirstOrganization]
52
53GO
54
55
56
57CREATE TABLE [dbo].[FirstOrganization] (
58
59[id] [int] IDENTITY (1, 1) NOT NULL ,
60
61[OrganizationName] [varchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
62
63[Description] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL
64
65) ON [PRIMARY]
66
67GO
68
69第二个表SecondOrganization
70
71SQL脚本如下:
72
73if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SecondOrganization]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
74
75drop table [dbo].[SecondOrganization]
76
77GO
78
79
80
81CREATE TABLE [dbo].[SecondOrganization] (
82
83[id] [int] IDENTITY (1, 1) NOT NULL ,
84
85[parentID] [int] NOT NULL ,
86
87[OrganizationName] [varchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
88
89[Description] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL ,
90
91[OrderNumber] [int] NULL
92
93) ON [PRIMARY]
94
95GO
96
97
98
99第三个表ThirdOrganization
100
101SQL脚本如下:
102
103if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ThirdOrganization]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
104
105drop table [dbo].[ThirdOrganization]
106
107GO
108
109
110
111CREATE TABLE [dbo].[ThirdOrganization] (
112
113[id] [int] IDENTITY (1, 1) NOT NULL ,
114
115[parentID] [int] NOT NULL ,
116
117[OrganizationName] [varchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
118
119[Description] [varchar] (8000) COLLATE Chinese_PRC_CI_AS NULL ,
120
121[OrderNumber] [int] NULL
122
123) ON [PRIMARY]
124
125GO
126
127
128
129Ok,ODBC,我们建好了,数据库也建好了,至于站点的配置,我想大家都应该知道的,这里不再陈述。这里我的站点IP是http://200.100.100.88 (内部网络IP)
130
131终于开始写程序喽,好累,噗哧,噗哧,刚帮我同事搬东西,歇一会儿,coffee-ing……….
132
133好的,为了方便IIS他老人家,我们也懒得敲多余的字母,我们是聪明的,不勤劳的程序员,本来程序员就已经够累的了,还不方便我们自己?嘿嘿,赞同者鼓掌,啪啪啪啪,faint,哪来的鞭炮?啥家的小孩也不好好管管。。。。。。。。。J
134
135新建default.asp文件,我们在写如下程序,
136
137建立数据库连接对象,
138
139set objconn=server.CreateObject("adodb.connection")
140
141objconn.Open " xxrl_ ODBC ","xxrl_STUDY","xxrl_STUDY"
142
143然后打开我们要进行操作的3个数据集
144
145dim sql1,sql2,sql3
146
147sql1="select * from FirstOrganization"
148
149sql2 = "select * from SecondOrganization"
150
151sql3 = "select * from ThirdOrganization"
152
153‘/////////////////////////打开第一组织库
154
155set rs1=server.CreateObject("adodb.recordset")
156
157rs1.Open sql1,objconn,1,1
158
159
160
161set rs2=server.CreateObject("adodb.recordset")
162
163rs2.Open sql2,objconn,1,1
164
165
166
167set rs3=server.CreateObject("adodb.recordset")
168
169rs3.Open sql3,objconn,1,1
170\---------------------------------------------------------------
171
172建一个SELECT类型的HTTP控件,包含在form表单中如下:
173
174‘////////////////////控件的初始值是从FirstOrganization中读取的,FirstOrganization在本例子中只有一个数据就是××化工厂代码如下:
175
176<form method="post" name="form1" style="margin:0;">
177<select name="FirstOrganization">
178
if rs1.RecordCount >0 then
Response.Write"<option option="" organizationname")&"<="" value="&rs1(“id”)&”>”&rs1(">"
Else
Response.Write "没有配置"
end if
1
2</option></select>
3</form>
4
5好,这就是我们的联动功能的头
6
7下面我们要建立第二个select控件了,第二个select控件中,我们用到了onchange函数,关于这个函数的详细解释,请看MSDN。代码如下(包含在form中):
8
9<select name="SecondOrganization" onchange="”ChangeLocationi(form1.SecondOrganization.options[form1.SecondOrganization.selectedIndex].value);”">
10<option value="””">\-------------</option>
11
if rs2.RecordCount<0 then
response.write “<option value="””””">库中没有部门!</option>”
else
while not rs2.eof
response.write “<option value="”&rs2(“id”)&”">” &rs2(“OrganizationName”)&”</option>”
rs2.movenext
wend
end if
1
2</select>
3
4OK,第二个也搞定,下面我们来建立第三个SELECT 同样放在form表单里,如下:
5
6<select name="ThirdOrganization">
7</select>
8
9不要忘记关数据集噢,
10
11rs1.close
12
13set rs1 = nothing
14
15rs2.close
16
17set rs2 = nothing
18
19rs3.close
20
21set rs3 = nothing
22
23ok,页面元素全部准备就绪,下面开始我们真正的联动之旅。
24
25本例子采用ASP和JAVASCRIPT交互的方法取数据库中的数据,由于我们在form表单前我们新建script脚本快,由于要交互,所以我们要这么写才能很好的交互
26
=”<script language="javascript">”
1
2</script>
3
4然后我们就可以在script块中书写我们的程序了。
5
6我们的基本操作是根据二级下拉中得出三级下拉,二级我们都从数据库中取出来了,下面我们要取三级组织的数据了,如下
7
=”<script language="javascript"></script></select>