标题:网上下的下拉联动插件!数据库是写在XML文本文件里的。如何实现这样的功能? ...
只看楼主
lxb0592
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2012-5-28
结帖率:86.67%
已结贴  问题点数:20 回复次数:23 
网上下的下拉联动插件!数据库是写在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>
搜索更多相关主题的帖子: 一级 文本文件 如何 动态 
2012-11-13 20:46
lxb0592
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2012-5-28
得分:0 
这个是添加数据时的SCRIPT代码,应该是加载XML数据库作用,那么在修改数据时这段代码做和修改啊?
程序代码:
<script>
var m_oXMLDoc = [color=#0000FF]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>
[/color]我曾尝试加了<select name="MaterialClass1" ChildSelectName="MaterialClass2"><option value="<%=rs("card")%></option></select>
<%=rs("card")%是这条数据本身的值。但没成功。应该还是要修改SCRIPT代码吧!


[ 本帖最后由 lxb0592 于 2012-11-14 16:34 编辑 ]
2012-11-14 16:33
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
得分:10 
这些代码只是将XML绑定到select上去,并没涉及选中项的设置.当第一级改变时,怎么知道你在二级上要选择哪一项啊,当然是默认第一项啦.


[ 本帖最后由 cnfarer 于 2012-11-14 20:44 编辑 ]

★★★★★为人民服务★★★★★
2012-11-14 20:43
dzt0001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1281
专家分:4998
注 册:2005-10-12
得分:10 
function BindSelect( strXMLSrc , objSelectName , selectedValue)
{
    m_oXMLDoc.async = true;
    m_oXMLDoc.onreadystatechange = Function( "fnLoadComplete('" + objSelectName + "', '" + selecetdValue + "');" );   
    m_oXMLDoc.load( strXMLSrc );
}

....
function fnLoadComplete(objSelectName, selectedValue)
.....
objSelect.options[i] = new Option(node .....    这句后面加下面蓝色代码
if (selectedValue) {
    if (objSelect.options[i].value==selectedValue)  objSelect.selectedIndex =i;
}


没有试验过,自己尝试吧

----我怎能在别人的苦难面前转过脸去----
2012-11-14 21:25
lxb0592
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2012-5-28
得分:0 
回复 4楼 dzt0001
试试看! 谢谢啊!
2012-11-14 21:42
lxb0592
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2012-5-28
得分:0 
回复 4楼 dzt0001
朋友在调用代码改怎么修改?
<select name="MaterialClass1" ChildSelectName="MaterialClass2"></select>
我在<select name="MaterialClass1" selectedValue="05" ChildSelectName="MaterialClass2"></select>
好像05的那个工区还是显示不来。还是默认第一个。
这里该怎么改?
2012-11-15 10:44
dzt0001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1281
专家分:4998
注 册:2005-10-12
得分:0 
回复 6楼 lxb0592
在自定义的Init()函数中
BindSelect( m_sXmlSrc, "MaterialClass1", "<%=数据库保存的值%>");

----我怎能在别人的苦难面前转过脸去----
2012-11-15 11:26
lxb0592
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2012-5-28
得分:0 
回复 7楼 dzt0001
大哥非常感谢您! 在您指导下,解决了这个问题!(这个下拉联动插件非常实用,如果因为这个问题而放弃可惜)
BindSelect( m_sXmlSrc, "MaterialClass1", "<%=数据库保存的值%>");
在Init()函数你提示的位置,我加入数据库保存的值的代码,就解决了。再次感谢您! 非常激动。
2012-11-15 17:41
lxb0592
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2012-5-28
得分:0 
感谢 dzt0001高手朋友!在他指导下! 解决的了这个问题。
2012-11-15 17:44
lxb0592
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2012-5-28
得分:0 
回复 7楼 dzt0001
晕死!忘了还有个第二级子下拉框也要把原来的数据传递过来。也没搞出来!兄弟再麻烦您一下,该怎么再改下?是还要修改前面的SCRIP代码?还是对下面的调用代码修改?

<select name="MaterialClass1" ChildSelectName="MaterialClass2"></select>
<select name="MaterialClass2" ChildSelectName="MaterialClass3"></select>
<select name="MaterialClass3"></select>
中间红色是第二级的调用下拉框。


下面是第二级的一个XML数据库文本文件
<?xml version="1.0" encoding="GB2312"?>
    <MaterialClasses>
        <MaterialClass MaterialClassCode="22" Description="鹰西THDS/TFDS/AEI"/>
        <MaterialClass MaterialClassCode="23" Description="贵溪上下行THDS"/>
        <MaterialClass MaterialClassCode="24" Description="弋阳东上下行THDS"/>
        
     </MaterialClasses>
2012-11-15 22:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-386948-1-1.html




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

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