| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 583 人关注过本帖
标题:三级联动菜单传值的问题
取消只看楼主 加入收藏
linuxmage
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-4-6
收藏
 问题点数:0 回复次数:0 
三级联动菜单传值的问题

在网上找到一个很好的联动三级菜单的源码,可是我想把选择后的值传到其它页面,或取出,怎么做?为什么总是乱码?请高手指教

源码如下:

一個錶中有3個類別
classsname classs classss
主類別|次類別|次次類別|(均為字符類型)
現在用SELECT做成三級動態下拉菜單!

<HTML>
<META NAME="save" CONTENT="history"/>

<script>


function AttachXMLForSelect(xd,arr,defaultText,defaultValue)//xd:xmldom,arr:array of select
{
function EnsureString(str)
{
if(typeof(str)=="string")return str;
if(str==null)return "";
try{return str+"";}catch(x){}
return "";
}
function EnsureInt(i)
{
if(typeof(i)=="i")return i;
try{i=parseInt(i);}catch(x){return 0};
if(isNaN(i))return 0;
return i;
}
defaultText=EnsureString(defaultText);
defaultValue=EnsureString(defaultValue);


if(xd==null||xd.documentElement==null||arr==null||arr.length==0)
throw(new Error(-1,"invalid arguments"));


(function(xmldom){
xd=new ActiveXObject("Microsoft.XMLDOM");
xd.loadXML(xmldom.xml);
})(xd)


for(var i=0;i<arr.length;i++)
arr[i]={
uniqueID:arr[i].uniqueID
,
node:null
,
attach:false
};

arr[0].node=xd.documentElement;


ReAttachNode(0);

var Controller={

HandleChange:HandleChange

};

return Controller;

function OnSelectChange(event)
{
HandleChange(event.srcElement);
}

function HandleChange(s)
{

for(var index=0;index<arr.length;index++)
{
if(s.uniqueID==arr[index].uniqueID)
break;
}

var node=arr[index].node;


if(index!=0)
node.setAttribute("selectedIndex",s.selectedIndex);


if(index<arr.length-1)
{

if(node)
{
var xns=node.selectNodes("item");
arr[index+1].node=xns.item(s.selectedIndex);
}
else arr[index+1].node=null;

ReAttachNode(index+1);
}
}

function ReAttachNode(index)
{

var node=arr[index].node;
var pnode=null;
if(index>0)pnode=arr[index].node;


var s=document.getElementById(arr[index].uniqueID);

s.innerHTML="";


if((node==null||node.selectNodes("item").length==0)&&defaultText)
{
var o=document.createElement("OPTION");
o.value=defaultValue;
o.innerText=defaultText;
s.appendChild(o);
}

if(node==null)
{
if(arr[index].attach)
{
s.detachEvent("onchange",OnSelectChange);
arr[index].attach=false;
}


HandleChange(s);
return;
}


if(arr[index].attach==false)
{
s.attachEvent("onchange",OnSelectChange);
arr[index].attach=true;
}


var xns=node.selectNodes("item");
for(var i=0;i<xns.length;i++)
{
var o=document.createElement("OPTION");
o.value=EnsureString(xns.item(i).getAttribute("value"));
o.innerText=EnsureString(xns.item(i).getAttribute("text"));
s.appendChild(o);
}

var si=0;
if(index!=0)
si=EnsureInt(node.getAttribute("selectedIndex"));
if(si==0)si="0";
if(s.options.length)
s.selectedIndex=parseInt(si);


HandleChange(s);
}
}

</script>

<BODY>

<% DbPath = SERVER.MapPath("xxx.mdb")
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DbPath
%>
<XML id=oxml>
<item>
<%
set rst=server.createobject ("adodb.recordset")
sqlt="select distinct classname,classs,classss from chanpin"
rst.open sqlt,conn,3,1
name1=""//同一個錶中的三個相關聯的字段
name2=""//同一個錶中的三個相關聯的字段
name3=""//同一個錶中的三個相關聯的字段
do while not rst.eof
If name1<>rst("classname").Value Then
If name1<>"" Then Response.Write "</item></item>"
name1=rst("classname").Value
Response.Write "<item text='"+rst("classname").Value+"' value='"+rst("classname").Value+"'>"
name2=""
End If
if name2<>rst("classs") then
If name2<>"" Then Response.Write "</item>"
name2=rst("classs").Value
Response.Write "<item text='"+rst("classs").Value+"' value='"+rst("classs").Value+"'>"
Response.Write "<item text='ggg' value='yyyy'/>"
name3=""
end if
if name3<>rst("classss") then
name3=rst("classss").Value
Response.Write "<item text='"+rst("classss").Value+"' value='"+rst("classss").Value+"'/>"
end if
rst.movenext
loop
rst.close

%>
</item>
</item>
</item>
</XML>

<SCRIPT>
function AlertForm(f)
{
alert(
"s1:\t"+GetSelectOption(f("s1")).innerText + "\t:\t" + GetSelectOption(f("s1")).value + "\r\n"
+
"s2:\t"+GetSelectOption(f("s2")).innerText + "\t:\t" + GetSelectOption(f("s2")).value + "\r\n"
+
"s3:\t"+GetSelectOption(f("s3")).innerText + "\t:\t" + GetSelectOption(f("s3")).value + "\r\n"
);
return event.returnValue=false;
}
function GetSelectOption(s)
{
return s(s.selectedIndex);
}
</SCRIPT>
<FORM id=f1 onsubmit="AlertForm(this)"
>
<SELECT name="s1" style="width:100px;">
</SELECT>
<SELECT name="s2" style="width:100px;">
</SELECT>
<SELECT name="s3" style="width:100px;">
<!--
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//将上面的<SELECT name="s3" style="width:100px;">修改为
<SELECT name="s3" style="display:none;width:100px;" >就变成二级别的了@~@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
-->
</SELECT>
<INPUT type="submit">
</FORM>
<input type=hidden id=inpSave style="behavior:url(#default#savehistory)" value="0;0;0">
</BODY>

<script>
var C=AttachXMLForSelect(oxml.XMLDocument,[f1("s1"),f1("s2"),f1("s3")]);


function window.onload()
{
var sis=inpSave.value;
var arr=sis.split(";");
f1("s1").selectedIndex=parseInt(arr[0]);
C.HandleChange(f1("s1"));
f1("s2").selectedIndex=parseInt(arr[1]);
C.HandleChange(f1("s2"));
f1("s3").selectedIndex=parseInt(arr[2]);
C.HandleChange(f1("s3"));
}
function window.onbeforeunload()
{
inpSave.value=""+f1("s1").selectedIndex+";"+f1("s2").selectedIndex+";"+f1("s3").selectedIndex;
}
</script>
</html>


那么,s1,s2,s3的值如何取出?
比如将其传入1.asp?s1=.......
还有为什么传入的是乱码?如何解决,谢谢!


搜索更多相关主题的帖子: 传值 菜单 
2006-04-06 21:26
快速回复:三级联动菜单传值的问题
数据加载中...
 
   



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

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