代码如下:
<style>
font{font:icon}
select
{
    position: relative;
    left: -2px;
    top: -2px;
    width: 100px; 
    line-height: 14px;
    border-style: none;
    border-width: 0px; 
}
</style>
<script>
//映射数据库中的zone表id:name
var zone_table="1:南京,"+
               "2:苏州,"+
               "3:扬州";
//映射数据库中的lib表id:name:zoneID
var lib_table="10:南京档案一:1,"+
              "11:南京档案二:1,"+
              "12:苏州档案一:2,"+
              "13:苏州档案二:2,"+
              "14:扬州档案一:3,"+
              "15:扬州档案二:3";
//classID:name
var class_table="100:分类,"+
                "101:案卷,"+
                "102:未组卷文件夹";
//映射数据库中pobject表:id:name:classID
var power_table="1000:打开分类:100,"+
         "1001:修改分类:100,"+
                "1002:删除分类:100,"+
                "1003:新建子分类:100,"+
         "1004:分类下新建:100,"+
                "1005:分类授权:100,"+
         "1006:访问案卷:101,"+
         "1007:打开案卷:101,"+
         "1008:修改案卷:101,"+
              "1009:拆卷,删除案卷,销毁案卷:101,"+
         "1010:编目:101,"+
                "1011:案卷授权;101,"+
         "1012:借出实物:101,"+
         "1013:打印下载原件:101,"+
                "1014:打印下载原件:102,"+
         "1015:打开未组卷文件:102,"+
                "1016:修改文组卷文件:102,"+
                "1017:组卷文件夹授权:102";/*
*  xmlParser class
*/function xmlParser(path){
this.path=path;//
}xmlParser.prototype.getDoc=function(){
var doc = new ActiveXObject("MSXML2.DOMDocument.3.0");
doc.load(this.path);
return doc;
}xmlParser.prototype.getZones=function(){
var doc=this.getDoc();
var zones=doc.getElementsByTagName("zone");
var id,name;//
var zonesArray=new Array();
for(var i=0;i<zones.length;i++){
zone=zones[i].attributes;
id=zone[0].value;//
name=zone[1].value;//
zonesArray.push(id+":"+name);
}
return zonesArray.toString();
//return zone_table;
}
xmlParser.prototype.getLibs=function(){
var doc=this.getDoc();
var libs=doc.getElementsByTagName("lib");
var id,name,zoneID;//
var libsArray=new Array();
for(var i=0;i<libs.length;i++){
lib=libs[i].attributes;
id=lib[0].value;//
name=lib[1].value;//
zoneID=lib[2].value;//
libsArray.push(id+":"+name+":"+zoneID);
}
return libsArray.toString();
//return lib_table;
}
xmlParser.prototype.getClasses=function(){
var doc=this.getDoc();
var cs=doc.getElementsByTagName("class");
var id,name;//
var csArray=new Array();
for(var i=0;i<cs.length;i++){
c=cs[i].attributes;
id=c[0].value;//
name=c[1].value;//
csArray.push(id+":"+name);
}
return csArray.toString();
//return class_table;
}
xmlParser.prototype.getPowers=function(){
var doc=this.getDoc();
var powers=doc.getElementsByTagName("power");
var id,name,classID;//
var powersArray=new Array();
for(var i=0;i<powers.length;i++){
power=powers[i].attributes;
id=power[0].value;//
name=power[1].value;//
classID=power[2].value;//
powersArray.push(id+":"+name+":"+classID);
}
return powersArray.toString();
//return power_table;
};
var  viewHandler={

xmlparser :  new xmlParser("viewModal.xml"),

instance : new viewModal(this.xmlparser), init : function(){
this.instance.initialize();
},

zoneChange : function(){
this.instance.change_ZoneSELECT();
},

libChange : function(){
this.instance.change_LibSELECT();
},

classChange : function(){
this.instance.change_ClassSELECT();
}
};/*
*  viewModal class
*/
function viewModal(xmlparser){
this.xmlparser=xmlparser;
}
viewModal.prototype.init_ZoneSELECT=function(){
var html="<div>zone:&nbsp;&nbsp<select id='zone' onchange='viewHandler.zoneChange()'></select></div>";
return html;
}
viewModal.prototype.init_ZoneOPTION=function(){
var selectObject=document.getElementById('zone');//
var zoneArray=this.xmlparser.getZones().split(',');
for(var i=0;i<zoneArray.length;i++){
var temp=zoneArray[i].split(':');
selectObject.options[selectObject.options.length]=new Option(temp[1],temp[0]);
}
}
viewModal.prototype.change_ZoneSELECT=function(){
this.init_LibOPTION();
this.init_ClassOPTION();
this.init_ALLPOWERS();
}
viewModal.prototype.init_LibSELECT=function(){
var html="<div>lib:<select id='lib' onchange='viewHandler.libChange()'></select></div>";
return html;
}
viewModal.prototype.init_LibOPTION=function(){
var zoneSelectObject=document.getElementById('zone');//
var libSelectObject=document.getElementById('lib');//
var zoneID=zoneSelectObject.value;//
var libArray=this.xmlparser.getLibs().split(",");
var index=0;
for(var i=0;i<libArray.length;i++){
var temp=libArray[i].split(':');
if(temp[2]==zoneID){
libSelectObject.options[index++]=new Option(temp[1],temp[0]);
}
}
}
viewModal.prototype.change_LibSELECT=function(){
this.init_ClassOPTION();
this.init_ALLPOWERS();
}viewModal.prototype.init_ClassSELECT=function(){
var html="<div>class:&nbsp;&nbsp<select id='class' onchange='viewHandler.classChange()'></select></div>";
return html;
}
viewModal.prototype.init_ClassOPTION=function(){
var classSelectObject=document.getElementById('class');//
var classArray=this.xmlparser.getClasses().split(",");
for(var i=0;i<classArray.length;i++){
temp=classArray[i].split(':');
classSelectObject.options[i]=new Option(temp[1],temp[0]);
}
}
viewModal.prototype.change_ClassSELECT=function(){
this.init_ALLPOWERS();
}
viewModal.prototype.init_PowerDIV=function(){
var html="<hr style='height:1;width:100%;align:left;color:#86BCD4;Shade:no'>";
html+="<div><font style='font-weight:bolder'>powerlist</font></div><div id='powers'></div>";
return html;
}
viewModal.prototype.init_ALLPOWERS=function(){
var html="";
var classSelectObject=document.getElementById('class');//
var powerObject=document.getElementById('powers');//
var classID=classSelectObject.value;
var powerArray=this.xmlparser.getPowers().split(",");
for(var i=0;i<powerArray.length;i++){
var temp=powerArray[i].split(":");
if(classID==temp[2]){
html+="<input type='checkbox' id="+temp[0]+"value="+temp[0]+"><font>"+temp[1]+"</font><br>";
}
}
powerObject.innerHTML=html;
}
viewModal.prototype.initialize=function(){
var html=this.init_ZoneSELECT();
html+=this.init_LibSELECT();
html+=this.init_ClassSELECT();
html+=this.init_PowerDIV();
document.write(html);
this.init_ZoneOPTION();
this.init_LibOPTION();
this.init_ClassOPTION();
this.init_ALLPOWERS();
};var xmlparser=new xmlParser('viewModal.xml');
//xmlparser.getZones();
//xmlparser.getLibs();
var viewmodal=new viewModal(xmlparser);
viewmodal.initialize();
</script>有两个class
一个xmlParser 类,用来处理xml文件信息,他包括4个重要的方法(单独测试通过)
getZones()用来返回一个zone_table格式的字符串
getLibs()用来返回一个lib_table格式的字符串
getClasses()用来返回一个class_table格式的字符串
getPowers()用来返回一个power_class格式的字符串
另外一个是viewModal类,用来作为显示界面的
(之前是正常的,在我把js代码重构后,有点不正常了)
viewModal有一个属性是xmlParser类的实例
方法不列出来了调用如果下:
var xmlparser=new xmlParser('viewModal.xml');
var viewmodal=new viewModal(xmlparser);
viewmodal.initialize();
 
问题出现了,如果改成
var xmlparser=new xmlParser('viewModal.xml');
xmlparser.getZones();//这里一点用也没
xmlparser.getLibs();//这句多余
var viewmodal=new viewModal(xmlparser);
viewmodal.initialize();
则正常显示了
这里的问题很让人费解,希望高手帮帮忙

解决方案 »

  1.   

    忘记说了还有一个viewHandler类,这个相当于一个门面角色,
    他把xmlParser类和viewModal类组合起来的,方便使用者调用.
    他的init()方法能一步到位.由于viewHandler也出现了问题,所以这里先不谈这个。对于上面的问题:
    如果不增加那2个无用的方法,
    还有一个替换办法就是xmlParser类的getZones(),getLibs(),getClasses(),getPowers()方法改下,由于那里用DOM解析xml文件,返回一个字符串,我现在改成直接返回预先定义的字符串,
    问题则不存在了我这里初步断定:是ActiveX控件实例在javascript好象沉睡了一样。
    总之我现在乱乱的,不知道问题的原因