| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1011 人关注过本帖
标题:一个二级联动的怪问题?请求大家研究
取消只看楼主 加入收藏
kira007
Rank: 2
等 级:论坛游民
帖 子:294
专家分:27
注 册:2007-6-28
结帖率:50%
收藏
 问题点数:0 回复次数:5 
一个二级联动的怪问题?请求大家研究
前段时间做了个二级的菜单联动,联动条件 表A的 categoryid = 表B的 categoryid ;现在我将表A 的categoryid由数字型改为 文本型,联动条件改成 表A的 categoryid like '% " & 表B的 categoryid &"%' 后就不能联动了,是否做联动的 条件 不能使用 like 这种方式?
小弟在线期待大家的指点。
搜索更多相关主题的帖子: 请求 研究 
2007-11-05 18:10
kira007
Rank: 2
等 级:论坛游民
帖 子:294
专家分:27
注 册:2007-6-28
收藏
得分:0 
具体现象就是 ,二级类别栏目为空白,即使选择了一级大类,也是空白的。
注明:数据库中存在一级大类的从属二级子类的。

生活的理想,就是为了理想的生活。
2007-11-05 20:40
kira007
Rank: 2
等 级:论坛游民
帖 子:294
专家分:27
注 册:2007-6-28
收藏
得分:0 

补充以下代码给大家研究
<%
'从小类表中取出数据
set rs=server.CreateObject("adodb.recordset")
sql="select * from b2b_parductppp "
rs.open sql,conn,1,1
%>
<script language="JavaScript">
var num;
//定义数组
var calArray=new Array();
<%
dim j
j=0
do while not rs.eof
%>
//将小类表中的所有相关记录存到数组calArray的对应元素中,红色加粗值类型为文本型
calArray[<%=j%>]=new Array("<%=rs("MarkID")%>","<%=rs("MarkName")%>","<%=rs("category")%>");
<%
j=j+1
rs.movenext
loop
rs.close
set rs=nothing
%>
//给num赋值为记录总数
num=<%=j%>
function givevalue(myvalue){
/*当选择大类列表的值不为空时首先清空小类下拉列表的所有项目。不然小类列表中的项目会叠加的。
同时也是初始化 options 的值为0 */
document.myform.SelectMark.length = 0;
//循环写出请求的大类所对应的小类。
for (i=0;i < num; i++)
{
if (calArray[i][2] == myvalue)
{
document.myform.SelectMark.options[document.myform.SelectMark.length] = new Option(calArray[i][1], calArray[i][0],"","");
/*定义新的Option对象并赋值。options的索引值从0开始。new Option对象有4个属性,对应分别是:文本串、value、defaultSelect、selected。在这里只用了第一个和第二个。*/
}
}
}
</script>
---------------------------------------------------------------------------------------------------------
大类选择列表框
<select name="categoryid" onChange="givevalue(document.myform.categoryid.options[document.myform.categoryid.selectedIndex].value)">
<option value="0">---选择类别---</option>
<%
sort(0)
dim ii
ii=0
dim firstid
sub sort(selec)
sql="select * from category where ParentID = "&selec&" order by categoryorder"
Set Rs1=Conn.Execute(sql)
if rs1.eof or rs1.bof then
noclass=1
else
rs1.movefirst
firstid=rs1("categoryid")
do while not rs1.eof
if selec=0 then

%>
<option value="<%=int(rs1("categoryid"))%>"><%=rs1("category")%></option>
<%
else
%>
<option value="<%=int(rs1("categoryid"))%>"><%=string(ii*2," ")%><%=rs1("category")%></option>
<%
end if

ii=ii+1
sort rs1("categoryid")
ii=ii-1
rs1.movenext
loop
rs1.close
Set Rs1 = Nothing
end if
end sub

%>
</select>
-----------------------------------------------------------------------------------------------------------
小类关联列表框
<select name="SelectMark" >
<%if noclass=1 then%>
<option value="" selected>暂无品牌</option>
<%
else
'在没有选择大类(页面刚载入)时要载入的小类,要跟默认的大类对应。
set rs=server.CreateObject("adodb.recordset")
sql="select * from b2b_parductppp where category like '%"&firstid&"%' "
rs.open sql,conn,1,1
if rs.eof or rs.bof then
%>
<option value="" selected>暂无品牌</option>
<%
else
do while not rs.eof
%>
<option value="<%=rs("MarkID")%>"><%=trim(rs("MarkName"))%></option>
<%
rs.movenext
loop
end if
rs.close
set rs=nothing
end if
%>
</select>
----------------------------------------------------------------------------------------------------------

firstid 为 一级大类的联动关键值
无论这样sql="select * from b2b_parductppp where category like '%'"&firstid&"'%' "
还是这样sql="select * from b2b_parductppp where category like '%"&firstid&"%' "


生活的理想,就是为了理想的生活。
2007-11-05 20:53
kira007
Rank: 2
等 级:论坛游民
帖 子:294
专家分:27
注 册:2007-6-28
收藏
得分:0 

因为 它 拥有多重属性的关系,不能用唯一值来联动。


生活的理想,就是为了理想的生活。
2007-11-05 22:57
kira007
Rank: 2
等 级:论坛游民
帖 子:294
专家分:27
注 册:2007-6-28
收藏
得分:0 
还是没能解决这个问题,只是把 原来的 数字型 categoryid 字段改为 文本型的 category,
联动关键 由 categoryid= "&firstid&" 改为 category like '%"&firstid&"%'
按道理应该可以才对的,为何只显示一片空白?

生活的理想,就是为了理想的生活。
2007-11-06 14:58
kira007
Rank: 2
等 级:论坛游民
帖 子:294
专家分:27
注 册:2007-6-28
收藏
得分:0 
[分享]奇怪的二级联动问题,解决了
以下是引用kira007在2007-11-5 20:53:47的发言:

补充以下代码给大家研究
<%
'从小类表中取出数据
set rs=server.CreateObject("adodb.recordset")
sql="select * from b2b_parductppp "
rs.open sql,conn,1,1
%>
<script language="JavaScript">
var num;
//定义数组
var calArray=new Array();
<%
dim j
j=0
do while not rs.eof
%>
//将小类表中的所有相关记录存到数组calArray的对应元素中,红色加粗值类型为文本型
calArray[<%=j%>]=new Array("<%=rs("MarkID")%>","<%=rs("MarkName")%>","<%=rs("category")%>");
<%
j=j+1
rs.movenext
loop
rs.close
set rs=nothing
%>
//给num赋值为记录总数
num=<%=j%>
function givevalue(myvalue){
/*当选择大类列表的值不为空时首先清空小类下拉列表的所有项目。不然小类列表中的项目会叠加的。
同时也是初始化 options 的值为0 */
document.myform.SelectMark.length = 0;
//循环写出请求的大类所对应的小类。
for (i=0;i < num; i++)
{
if (calArray[i][2] == myvalue)
{
document.myform.SelectMark.options[document.myform.SelectMark.length] = new Option(calArray[i][1], calArray[i][0],"","");
/*定义新的Option对象并赋值。options的索引值从0开始。new Option对象有4个属性,对应分别是:文本串、value、defaultSelect、selected。在这里只用了第一个和第二个。*/
}
}
}
</script>
---------------------------------------------------------------------------------------------------------
大类选择列表框
<select name="categoryid" onChange="givevalue(document.myform.categoryid.options[document.myform.categoryid.selectedIndex].value)">
<option value="0">---选择类别---</option>
<%
sort(0)
dim ii
ii=0
dim firstid
sub sort(selec)
sql="select * from category where ParentID = "&selec&" order by categoryorder"
Set Rs1=Conn.Execute(sql)
if rs1.eof or rs1.bof then
noclass=1
else
rs1.movefirst
firstid=rs1("categoryid")
do while not rs1.eof
if selec=0 then

%>
<option value="<%=int(rs1("categoryid"))%>"><%=rs1("category")%></option>
<%
else
%>
<option value="<%=int(rs1("categoryid"))%>"><%=string(ii*2," ")%><%=rs1("category")%></option>
<%
end if

ii=ii+1
sort rs1("categoryid")
ii=ii-1
rs1.movenext
loop
rs1.close
Set Rs1 = Nothing
end if
end sub

%>
</select>
-----------------------------------------------------------------------------------------------------------
小类关联列表框
<select name="SelectMark" >
<%if noclass=1 then%>
<option value="" selected>暂无品牌</option>
<%
else
'在没有选择大类(页面刚载入)时要载入的小类,要跟默认的大类对应。
set rs=server.CreateObject("adodb.recordset")
sql="select * from b2b_parductppp where category like '%"&firstid&"%' "
rs.open sql,conn,1,1
if rs.eof or rs.bof then
%>
<option value="" selected>暂无品牌</option>
<%
else
do while not rs.eof
%>
<option value="<%=rs("MarkID")%>"><%=trim(rs("MarkName"))%></option>
<%
rs.movenext
loop
end if
rs.close
set rs=nothing
end if
%>
</select>
----------------------------------------------------------------------------------------------------------

firstid 为 一级大类的联动关键值
无论这样sql="select * from b2b_parductppp where category like '%'"&firstid&"'%' "
还是这样sql="select * from b2b_parductppp where category like '%"&firstid&"%' "

问题在网友“做人很低调”的帮助下,问题完美解决了,只是把JS代码中的if中的条件换成calArray[i][2].indexOf(myvalue)!=-1 就实现了我所需要的效果!



生活的理想,就是为了理想的生活。
2007-11-07 11:36
快速回复:一个二级联动的怪问题?请求大家研究
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031236 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved