首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > ASP >

网下上的上拉联动插件!数据库是写在XML文本文件里的。怎么实现这样的功能

2012-12-27 
网上下的下拉联动插件!数据库是写在XML文本文件里的。如何实现这样的功能?下拉联动代码如下(已运用到我的页

网上下的下拉联动插件!数据库是写在XML文本文件里的。如何实现这样的功能?
下拉联动代码如下(已运用到我的页面里面):

多级联动下拉选择框,动态获取下一级,每一级数据为XML,可支持无限级(浏览器端需要Microsoft.XMLDOM支持)</p>
<select name="MaterialClass1" ChildSelectName="MaterialClass2"></select>
<select name="MaterialClass2" ChildSelectName="MaterialClass3"></select>
<select name="MaterialClass3"></select>

添加数据时的页面

但是在需要对已有的数据修改时!所属工区一直是默认最上面的鹰潭。如何修改代码使工区栏默认为这条数据本身的工区?



这是所属工区的XML数据库文件(不在系统MDB数据库里,单独的一个.XML文本文件里)
<MaterialClasses>
        <MaterialClass MaterialClassCode="01" Description="鹰潭"/>
        <MaterialClass MaterialClassCode="02" Description="上饶"/>
        <MaterialClass MaterialClassCode="03" Description="景德镇"/>
        <MaterialClass MaterialClassCode="04" Description="向西一"/>
        <MaterialClass MaterialClassCode="05" Description="向西二"/>
        <MaterialClass MaterialClassCode="06" Description="萍乡"/>
        <MaterialClass MaterialClassCode="07" Description="新余"/>
        <MaterialClass MaterialClassCode="08" Description="九江"/>
        <MaterialClass MaterialClassCode="09" Description="吉安"/>
        <MaterialClass MaterialClassCode="10" Description="赣州"/>
        <MaterialClass MaterialClassCode="11" Description="向西电脱"/>
        <MaterialClass MaterialClassCode="12" Description="鹰潭综合"/>
        
    </MaterialClasses>

[最优解释]
<select name="MaterialClass1" onchange="scs(this.value,'MaterialClass2')" ChildSelectName="MaterialClass2" val="02"></select>
<select name="MaterialClass2" onchange="scs(this.value,'MaterialClass3')" ChildSelectName="MaterialClass3" val="31"></select>
<select name="MaterialClass3" val="33"></select>
<script type="text/javascript">
    var loadXML    = function(xmlFile) {
        var xmlDoc;
        if(window.ActiveXObject){
            xmlDoc    = new ActiveXObject('Microsoft.XMLDOM');
            xmlDoc.async    = false;
            xmlDoc.load(xmlFile);
        }else if (document.implementation&&document.implementation.createDocument){
            xmlDoc    = document.implementation.createDocument('', '', null);
            xmlDoc.load(xmlFile);
        }else {
            alert('您的浏览器不支持xml文件读取,于是本页面禁止您的操作,推荐使用IE5.0以上可以解决此问题!');


            return null;
        }
        return xmlDoc;
    };
    var xmlDoc    = loadXML('xml.xml');
    var arr=xmlDoc.getElementsByTagName("MaterialClasses")[0].childNodes;
    function scs(pid,name,val){
        var obj=document.getElementsByName(name)[0];
        if(obj==null)return false;
        obj.innerHTML="";
        var id=null,n= 0,val=obj.getAttribute("val");
        for(var i=0;i<arr.length;i++){
            if(arr[i].getAttribute("pid")==pid){
                var v=arr[i].getAttribute("MaterialClassCode");
                if(n==0
[其他解释]
谢谢啊! 不过还是没解决我想解决的问题!
[其他解释]
xzy21com 大哥! 我上面的这段SCRIPT代码应该是加载XML数据库作用,您看怎么修改这段代码啊!
我看的半懂半不懂!的 麻烦了!
[其他解释]
我尝试了以下几种方法,但都没实现成功!
1,<select name="MaterialClass1" ChildSelectName="MaterialClass2"><option vaule=rs("id_card")</option></select><select name="MaterialClass2" ChildSelectName="MaterialClass3"></select>
<select name="MaterialClass3"></select>
2,<select name="MaterialClass1" ChildSelectName="MaterialClass2"><option MaterialClassCode=rs("id_card")</option></select>
<select name="MaterialClass2" ChildSelectName="MaterialClass3"></select>
<select name="MaterialClass3"></select>

rs("id_card")是现成的数据值!
有其他方法能实现不?
[其他解释]
一样的,你那个我不知道你具体的东西

但原理是一样的
你的那个下拉的数据是怎么来的,是服务端程序循环出来的,还会用JS加载过来的
如果服务端程序循环出来的就直接if判断,如果是JS加载过来的,那应该是在JS里进行判断
[其他解释]
大哥,你除了问下拉菜单就是下拉框成专家了
[其他解释]
呵呵! 我菜鸟啊! 病急乱投医啊!
[其他解释]
v==val)id=arr[i].getAttribute("MaterialClassCode");
                var str=new Option(arr[i].getAttribute("Description"),v);
                obj.options.add(str);
                n++;
            }
        }
        var child=obj.getAttribute("ChildSelectName");
        if(child!=null){
            scs(id,child);
        }
    }
    scs("0","MaterialClass1");


</script>

<?xml version="1.0" encoding="utf-8" ?>
<MaterialClasses>
    <MaterialClass MaterialClassCode="01" pid="0" Description="鹰潭"/>
    <MaterialClass MaterialClassCode="20" pid="01" Description="鹰潭1"/>
    <MaterialClass MaterialClassCode="21" pid="01" Description="鹰潭2"/>
    <MaterialClass MaterialClassCode="22" pid="20" Description="鹰潭1_1"/>
    <MaterialClass MaterialClassCode="23" pid="20" Description="鹰潭1_2"/>
    <MaterialClass MaterialClassCode="24" pid="21" Description="鹰潭2_1"/>
    <MaterialClass MaterialClassCode="02" pid="0" Description="上饶"/>
    <MaterialClass MaterialClassCode="30" pid="02" Description="上饶1"/>
    <MaterialClass MaterialClassCode="31" pid="02" Description="上饶2"/>
    <MaterialClass MaterialClassCode="32" pid="30" Description="上饶1_1"/>
    <MaterialClass MaterialClassCode="33" pid="31" Description="上饶2_1"/>
    <MaterialClass MaterialClassCode="03" pid="0" Description="景德镇"/>
    <MaterialClass MaterialClassCode="04" pid="0" Description="向西一"/>
    <MaterialClass MaterialClassCode="05" pid="0" Description="向西二"/>
    <MaterialClass MaterialClassCode="06" pid="0" Description="萍乡"/>
    <MaterialClass MaterialClassCode="07" pid="0" Description="新余"/>
    <MaterialClass MaterialClassCode="08" pid="0" Description="九江"/>
    <MaterialClass MaterialClassCode="09" pid="0" Description="吉安"/>
    <MaterialClass MaterialClassCode="10" pid="0" Description="赣州"/>
    <MaterialClass MaterialClassCode="11" pid="0" Description="向西电脱"/>
    <MaterialClass MaterialClassCode="12" pid="0" Description="鹰潭综合"/>
</MaterialClasses>

[其他解释]
对已有数据修改,你应该把保存的那个默认数据传递过来与其比较,跟这是所属工区的XML数据库文件这个没关系,这个只是读取所有的工区的数据,但你还保存的那个并不是在这个里面吧
[其他解释]
谢谢版主! 是啊,您理解了我的意思!关键我保存的默认工区数据不知道怎么传递过来啊! 系统自带数据库有现成的代码,传统过来比较搞的定,这个是XML数据库不知道怎么把默认数据传递过来?
[其他解释]
<select name="MaterialClass1" onchange="scs(this.value,'MaterialClass2')" ChildSelectName="MaterialClass2" val="<%=rs("id_card")%>"></select>
<select name="MaterialClass2" onchange="scs(this.value,'MaterialClass3')" ChildSelectName="MaterialClass3" val="<%=rs("id_card2")%>"></select>
<select name="MaterialClass3" val="<%=rs("id_card3")%>"></select>
===================哥我算是深夜白干了!后两个值没有就留空。
[其他解释]
哈哈!不好意思!非常感谢,麻烦了! 
[其他解释]
chinno版主! 我这个下拉框数据应该是通过下面这个个SCRIPT代码,调用来的!那再修改数据的时候这个SCRIPT代码应该怎么修改! 才能把已有的数据(所属工区)传递过来!
<script>
var m_oXMLDoc = new ActiveXObject("Microsoft.XMLDOM");
var m_sXmlSrc = "MaterialClass.xml";


//-----------------------------------------------
// LoadXML(strXMLSrc)
//-----------------------------------------------

function BindSelect( strXMLSrc , objSelectName)
{
    m_oXMLDoc.async = true;  
    m_oXMLDoc.onreadystatechange = Function( "fnLoadComplete('" + objSelectName + "');" );    
    m_oXMLDoc.load( strXMLSrc );
}

function fnLoadComplete(objSelectName)
{
var objSelect = document.all[objSelectName];
var aryXMLNodes;
var node;
if (objSelect == null) 
return;
    try
    {
        var iReadyState = m_oXMLDoc.readyState;
    }
    catch(e)
    {
        return;
    }
    
    if(  iReadyState != 4 ) return;
    
    if( m_oXMLDoc != null && m_oXMLDoc.xml != "" )
    {
objSelect.length = 0;
aryXMLNodes = m_oXMLDoc.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( m_sXmlSrc, "MaterialClass1");
}
catch(e)
{
setTimeout("Init()",1000)
}
}


</script>

<body onLoad="Init()">
<p>多级联动下拉选择框,动态获取下一级,每一级数据为XML,可支持无限级(浏览器端需要Microsoft.XMLDOM支持)</p>
<select name="MaterialClass1" ChildSelectName="MaterialClass2"></select>
<select name="MaterialClass2" ChildSelectName="MaterialClass3"></select>
<select name="MaterialClass3"></select>

热点排行