+ -
当前位置:首页 → 问答吧 → 【求助】JS取XML值的问题

【求助】JS取XML值的问题

时间:2006-07-06

来源:互联网

<script language="javascript" type="text/javascript">
var XMLDoc=new ActiveXObject("Microsoft.XMLDOM");
var XmlSrc="MaterialClass.xml";

function BindSelect(StrXMLSrc,ObjSelectName)
{
        XMLDoc.async=true;
        XMLDoc.onreadystatechange=Function("LoadComplete('"+ObjSelectName+"');");   
    XMLDoc.load(StrXMLSrc);
}
function LoadComplete(ObjSelectName)
{
        var objSelect=document.all[ObjSelectName];
        var aryXMLNodes;
        var node;
        if(objSelect==null)
                return;
        try
        {
                var iReadyState=XMLDoc.readyState;
    }
        catch(e)
        {
                return;
    }
        if(iReadyState!=4)return;
        if(XMLDoc!=null&&XMLDoc.xml!="")
        {
                objSelect.length=0;
                aryXMLNodes=XMLDoc.documentElement.selectNodes("MaterialClass");
                for(var i=0;i<aryXMLNodes.length;i++)
                {
                        node=aryXMLNodes[i];
                        objSelect.options[i]=new Option(node.getAttribute("Description"),node.getAttribute("MaterialClassCode"));
                }
                if(objSelect.ChildSelectName!=null)
                {
                        objSelect.onchange=Function("BindSelect('MaterialClass'+this.options[this.selectedIndex].value+'.xml','"+objSelect.ChildSelectName+"');");   
                        objSelect.fireEvent("onchange");
                }
        }
}
function Init()
{
        try{
                BindSelect(XmlSrc,"MaterialClass1");
        }
        catch(e)
        {
                setTimeout("Init()",1000)
        }
}
Init();
</script>

<body>
<p>多级联动下拉选择框,动态获取下一级,每一级数据为XML,可支持无限级(浏览器端需要Microsoft.XMLDOM支持)</p>
<form action="?" method="get">
<select name="IDA" id="MaterialClass1" ChildSelectName="MaterialClass2"></select>
<select name="IDA" id="MaterialClass2" ChildSelectName="MaterialClass3"></select>
<select name="IDA" id="MaterialClass3"></select>
<input name="" type="submit" value="提交">
</form>

下面是xml数据-----MaterialClass.xml
<?xml version="1.0" encoding="GB2312"?>
        <MaterialClasses>
                <MaterialClass IDA="1" MaterialClassCode="01" Description="黑色及有色金属"/>
                <MaterialClass IDA="2" MaterialClassCode="02" Description="水泥、砂石砖瓦、砼"/>
                <MaterialClass IDA="3" MaterialClassCode="03" Description="木、竹材及其制品"/>
</MaterialClasses>

===============MaterialClass01.xml=========
<?xml version="1.0" encoding="GB2312"?>
        <MaterialClasses>
                <MaterialClass MaterialClassCode="0101" IDA="1" Description="圆钢"/>
                <MaterialClass MaterialClassCode="0101" IDA="2" Description="圆钢"/>
                <MaterialClass MaterialClassCode="0101" IDA="3" Description="圆钢"/>
                <MaterialClass MaterialClassCode="0101" IDA="4" Description="圆钢"/>
                <MaterialClass MaterialClassCode="0101" IDA="5" Description="圆钢"/>
                <MaterialClass MaterialClassCode="0102" IDA="6" Description="钢筋、盘条"/>
                <MaterialClass MaterialClassCode="0103" IDA="7" Description="钢丝、钢棒"/>
</MaterialClasses>

===========================================================
我想问的是
当表单FORM提交后SELECT只能取到XML文件里MaterialClassCode的值
但是我想取的是IDA的值,请问该怎样修改JS.并请高手注释一下JS中的每行功能说明,万分感谢!(本人还在学习阶段,对JS中的功能看不懂)
注:MaterialClassCode的值是为了在SELECT中指定XML文件名用的.

[ 本帖由 521o 最后编辑于 2006-7-8 09:38 ]

作者: 521o   发布时间: 2006-07-06

似乎应该将objSelect.options[i]=new Option(node.getAttribute("Description"),node.getAttribute("MaterialClassCode"),node.getAttribute("IDA"));

改为

objSelect.options[i]=new Option(node.getAttribute("Description"),node.getAttribute("IDA"),node.getAttribute("IDA"));

作者: 521o   发布时间: 2006-07-07

MaterialClassCode的值是为了在SELECT中指定XML文件名用的.
所以在JS里 node.getAttribute("MaterialClassCode")是不能替换为node.getAttribute("IDA")的

这才是我困扰的地方啊

作者: lly365   发布时间: 2006-07-08