4个回答
展开全部
总体要求是这样的吧:选择big的下拉菜单后,从数据库获得所选择大项内的二级选项,更新到二级下拉菜单中
一级菜单没得说,直接数据库读取
二级菜单就可以用两种方法实现,
1、先预读出所有二级选项及对应一级选项的classname,待选择一级菜单后利用js更换二级菜单的选项
2、选择一级菜单后,再从数据库读取二级菜单选项,更新到二级菜单,可以隐含一个页面作为刷新,这种办法比较繁琐些
<script language=javascript>
//最先从数据库读取所有选项值
//allSel数组形如:((北京,中关村,国贸,天安门,....),(上海,黄埔,....).....)
//(北京,中关村,国贸,天安门,....)---->第一个为一级选项,后面为二级选项
var allSel=new Array();//储存所有一级、二级选项,定义成全局变量
var tmpSel=new Array();//临时选项 allSel.add(tmpSel) allSel 是数组的数组,即二维数组
<%
dim bNew
rs.open "select * from big,small where big.bigclassName=small.bigclassname order by big.bigclassname",1,3,conn
bNew=rs("big.bigclassname")
response.write "tmpSel=new Array();"
response.write "tmpSel.add('" & rs("big.bigclassname") & "');"
do while not rs.eof
if bNew<>rs("big.bigclassname") then '新城市
response.write "allSel.add(tmpSel);"
response.write "tmpSel=new Array();"
response.write "tmpSel.add(" & rs("big.bigclassname") & ")"
end if
rsponse.write "tmpSel.add('" & rs("small.smallclassname") & "');" ‘加入二级菜单
rs.movenext
loop
rs.close
%>
</script>
一级菜单:<select id=bigsel onchange=sel_chg(this)>
<%
rs.open "select * from big",conn,1,3
do while not rs.eof
response.write "<option value=" & rs("id") & ">" & rs("bigclassname") & "</option>"
rs.movenext
loop
rs.close
%>
</select>
二级菜单<select id=ssel><option value=-1>请选择...</option></select>
js实现更新二级菜单
<script language=javascript>
function chgOption(op_arr){ //根据参数修改下拉菜单选项
var vOptions,iii;
var obj=document.all.ssel; //二级菜单obj
for(iii=0;iii<obj.length-1;iii++)obj.options.remove(0);//移除原二级菜单选项
for(iii=1;iii<op_arr.length;i++) { //iii=1
vOptions=document.createElement("option");
vOptions.value=iii;
vOptions.text=op_arr[iii];
obj.options.add(vOptions);
}
}
function sel_chg(obj){ //一级菜单选择后发起替换二级菜单
//获知是哪个选项被选中
var selIdx=obj.selectedIndex;
//根据之前的allSel替换二级菜单
chgOption(allSel[selIdx]);//注意这里调用allSel[selIdx]
}
</script>
一级菜单没得说,直接数据库读取
二级菜单就可以用两种方法实现,
1、先预读出所有二级选项及对应一级选项的classname,待选择一级菜单后利用js更换二级菜单的选项
2、选择一级菜单后,再从数据库读取二级菜单选项,更新到二级菜单,可以隐含一个页面作为刷新,这种办法比较繁琐些
<script language=javascript>
//最先从数据库读取所有选项值
//allSel数组形如:((北京,中关村,国贸,天安门,....),(上海,黄埔,....).....)
//(北京,中关村,国贸,天安门,....)---->第一个为一级选项,后面为二级选项
var allSel=new Array();//储存所有一级、二级选项,定义成全局变量
var tmpSel=new Array();//临时选项 allSel.add(tmpSel) allSel 是数组的数组,即二维数组
<%
dim bNew
rs.open "select * from big,small where big.bigclassName=small.bigclassname order by big.bigclassname",1,3,conn
bNew=rs("big.bigclassname")
response.write "tmpSel=new Array();"
response.write "tmpSel.add('" & rs("big.bigclassname") & "');"
do while not rs.eof
if bNew<>rs("big.bigclassname") then '新城市
response.write "allSel.add(tmpSel);"
response.write "tmpSel=new Array();"
response.write "tmpSel.add(" & rs("big.bigclassname") & ")"
end if
rsponse.write "tmpSel.add('" & rs("small.smallclassname") & "');" ‘加入二级菜单
rs.movenext
loop
rs.close
%>
</script>
一级菜单:<select id=bigsel onchange=sel_chg(this)>
<%
rs.open "select * from big",conn,1,3
do while not rs.eof
response.write "<option value=" & rs("id") & ">" & rs("bigclassname") & "</option>"
rs.movenext
loop
rs.close
%>
</select>
二级菜单<select id=ssel><option value=-1>请选择...</option></select>
js实现更新二级菜单
<script language=javascript>
function chgOption(op_arr){ //根据参数修改下拉菜单选项
var vOptions,iii;
var obj=document.all.ssel; //二级菜单obj
for(iii=0;iii<obj.length-1;iii++)obj.options.remove(0);//移除原二级菜单选项
for(iii=1;iii<op_arr.length;i++) { //iii=1
vOptions=document.createElement("option");
vOptions.value=iii;
vOptions.text=op_arr[iii];
obj.options.add(vOptions);
}
}
function sel_chg(obj){ //一级菜单选择后发起替换二级菜单
//获知是哪个选项被选中
var selIdx=obj.selectedIndex;
//根据之前的allSel替换二级菜单
chgOption(allSel[selIdx]);//注意这里调用allSel[selIdx]
}
</script>
展开全部
当然是结合javascript的ajax技术可以完成!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用JS做,网上一大把的二级菜单,把菜单内容换成动态调取数据就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
编辑 Visual Basic 代码。打开各模块的代码窗口后,可以查看不同窗体或模块中的代码,并且在它们之间做复制以及粘贴的动作。
可以按照下列所述的方式,来打开代码窗口:
在工程窗口中,可以选择一个窗体或模块,然后选择“查看代码”按钮。
在 “用户窗体”窗口中,可以双击控件或窗体;也可以从“视图”菜单中选择“代码窗口”,或者按下 F7 键。
窗口部件
“对象”框
显示所选对象的名称。可以按下列表框中的右边箭头,来显示此窗体中的对象。
“过程/事件”框
将“窗体”或“对象”框所含控件中,可以列出所有 Visual Basic 的事件。当选择了一个事件,则与事件名称相关的事件过程,就会显示在代码窗口中。
如果在对象框中显示的是“通用”,则过程框会列出所有声明,以及为此窗体所创建的常规过程。如果正在编辑模块中的代码,则过程框会列出所有模块中的常规过程。在上述两实例中,在过程框中所选的过程都会显示在代码窗口中。
模块中的所有过程会出现在一个单一滚动条的列表中,它们是按名称的字母来排列的。可以从代码窗口上端的下拉式列表中选取一个过程,此时指针会移到所选过程的第一行代码上面。
可以按照下列所述的方式,来打开代码窗口:
在工程窗口中,可以选择一个窗体或模块,然后选择“查看代码”按钮。
在 “用户窗体”窗口中,可以双击控件或窗体;也可以从“视图”菜单中选择“代码窗口”,或者按下 F7 键。
窗口部件
“对象”框
显示所选对象的名称。可以按下列表框中的右边箭头,来显示此窗体中的对象。
“过程/事件”框
将“窗体”或“对象”框所含控件中,可以列出所有 Visual Basic 的事件。当选择了一个事件,则与事件名称相关的事件过程,就会显示在代码窗口中。
如果在对象框中显示的是“通用”,则过程框会列出所有声明,以及为此窗体所创建的常规过程。如果正在编辑模块中的代码,则过程框会列出所有模块中的常规过程。在上述两实例中,在过程框中所选的过程都会显示在代码窗口中。
模块中的所有过程会出现在一个单一滚动条的列表中,它们是按名称的字母来排列的。可以从代码窗口上端的下拉式列表中选取一个过程,此时指针会移到所选过程的第一行代码上面。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询