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

JS关于省市县三级关联菜单“缺少对象”的有关问题,内详!()

2012-03-18 
JS关于省市县三级关联菜单“缺少对象”的问题,内详!(在线等)有一个省市县三级菜单,主要的代码如下(为了方便

JS关于省市县三级关联菜单“缺少对象”的问题,内详!(在线等)
有一个省市县三级菜单,主要的代码如下(为了方便表述,中间无关紧要的我略去了):

<html>
<head> <title> 省市县关联菜单 </title>  


<SCRIPT   LANGUAGE= "JavaScript ">
function   Dsy()  
{this.Items   =   {};   }  
Dsy.prototype.add   =   function(id,iArray)  
{this.Items[id]   =   iArray;   }  
Dsy.prototype.Exists   =   function(id)  
{if(typeof(this.Items[id])   ==   "undefined ")   return   false;  
return   true;   }  

function   change(v){  
var   str= "0 ";  
for(i=0;i <v;i++){   str+=( "_ "+(document.getElementById(s[i]).selectedIndex-1));};  
var   ss=document.getElementById(s[v]);  
with(ss){  
length   =   0;  
options[0]=new   Option(opt0[v],opt0[v]);  
if(v   &&   document.getElementById(s[v-1]).selectedIndex> 0   ||   !v)  
{  
if(dsy.Exists(str)){  
ar   =   dsy.Items[str];  
for(i=0;i <ar.length;i++)options[length]=new   Option(ar[i],ar[i]);  
if(v)options[1].selected   =   true;  
}  
}  
if(++v <s.length){change(v);}  
}  
}  

var   dsy   =   new   Dsy();  

dsy.add( "0 ",[ "安徽 ", "北京 ", "福建 ", "甘肃 ", "广东 ", "广西 ", "贵州 ", "海南 ", "河北 ", "河南 ", "黑龙江 ", "湖北 ", "湖南 ", "吉林 ", "江苏 ", "江西 ", "辽宁 ", "内蒙古 ", "宁夏 ", "青海 ", "山东 ", "山西 ", "陕西 ", "上海 ", "四川 ", "天津 ", "西藏 ", "新疆 ", "云南 ", "浙江 ", "重庆 "]);  

dsy.add( "0_0 ",[ "安庆 ", "蚌埠 ", "巢湖 ", "池州 ", "滁州 ", "阜阳 ", "合肥 ", "淮北 ", "淮南 ", "黄山 ", "六安 ", "马鞍山 ", "宿州 ", "铜陵 ", "芜湖 ", "宣城 ", "亳州 "]);  
dsy.add( "0_0_0 ",[ "安庆市 ", "怀宁县 ", "潜山县 ", "宿松县 ", "太湖县 ", "桐城市 ", "望江县 ", "岳西县 ", "枞阳县 "]);  
dsy.add( "0_0_1 ",[ "蚌埠市 ", "固镇县 ", "怀远县 ", "五河县 "]);  
dsy.add( "0_0_2 ",[ "巢湖市 ", "含山县 ", "和县 ", "庐江县 ", "无为县 "]);  
dsy.add( "0_0_3 ",[ "池州市 ", "东至县 ", "青阳县 ", "石台县 "]);  
dsy.add( "0_0_4 ",[ "滁州市 ", "定远县 ", "凤阳县 ", "来安县 ", "明光市 ", "全椒县 ", "天长市 "]);  
dsy.add( "0_0_5 ",[ "阜南县 ", "阜阳市 ", "界首市 ", "临泉县 ", "太和县 ", "颖上县 "]);  
dsy.add( "0_0_6 ",[ "长丰县 ", "肥东县 ", "肥西县 "]);  
dsy.add( "0_0_7 ",[ "淮北市 ", "濉溪县 "]);  
dsy.add( "0_0_8 ",[ "凤台县 ", "淮南市 "]);  
dsy.add( "0_0_9 ",[ "黄山市 ", "祁门县 ", "休宁县 ", "歙县 ", "黟县 "]);  
dsy.add( "0_0_10 ",[ "霍邱县 ", "霍山县 ", "金寨县 ", "六安市 ", "寿县 ", "舒城县 "]);  
dsy.add( "0_0_11 ",[ "当涂县 ", "马鞍山市 "]);  


dsy.add( "0_0_12 ",[ "灵璧县 ", "宿州市 ", "萧县 ", "泗县 ", "砀山县 "]);  
dsy.add( "0_0_13 ",[ "铜陵市 ", "铜陵县 "]);  
dsy.add( "0_0_14 ",[ "繁昌县 ", "南陵县 ", "芜湖市 ", "芜湖县 "]);  
dsy.add( "0_0_15 ",[ "广德县 ", "绩溪县 ", "郎溪县 ", "宁国市 ", "宣城市 ", "泾县 ", "旌德县 "]);  
dsy.add( "0_0_16 ",[ "利辛县 ", "蒙城县 ", "涡阳县 ", "亳州市 "]);  

dsy.add( "0_1 ",[ "北京 "]);  
dsy.add( "0_1_0 ",[ "北京市 ", "密云县 ", "延庆县 "]);  

//********此处省略其他县市的参数,不影响程序运行*************   //by   emituofo************

var   s=[ "s1 ", "s2 ", "s3 "];  
var   opt0   =   [ "省份 ", "地级市 ", "市、县级市、县 "];  
function   setup()  
{  
for(i=0;i <s.length-1;i++)  
document.getElementById(s[i]).onchange=new   Function( "change( "+(i+1)+ ") ");  
change(0);  
}  

</SCRIPT>  


</head>  
<body   bgcolor= "#E0E0E0 "   onload= "setup() ">  
多级关联菜单:  
<form   name= "frm ">  
<select   id= "s1 "> <option> 省份 </option> </select>  
<select   id= "s2 "> <option> 地级市 </option> </select>  
<select   id= "s3 "> <option> 市、县级市、县 </option> </select>  
</form>  
</body>  
</html>


以上代码存为.htm文件运行正常,没有错误提示;
但是我想为了程序结构清晰,便于维护,
将上面“ <SCRIPT   LANGUAGE= "JavaScript "> …… </SCRIPT>   ”
之间代码单独存为一个sanji.js文件,其它部分不变,
然后在.htm文件里使用 <script   language= "JavaScript "   src= "sanji.js "> </script> 的方式调用,

但此时运行.htm文件就会失去“三级菜单”关联调用的功能,并且报错:“缺少对象”,请问要实现我的要求,应如何解决?

谢谢!

[解决办法]
document.getElementById(s[v-1])
----------
类似与这样的句子,你上面还有很多.
在本页面,这些Id是可以获得的,但是如果你把代码移动出去,他就找不到页面中的id,
---
你可以把所有的id,获得后,然后把参数传递过去.即可~
[解决办法]
我也正在研究这个三级联动的代码,帮顶了。。
[解决办法]
改成document.forms[0].getElementById(s[v-1])
[解决办法]
我这里提出来可以运行,是IE吗?
[解决办法]
不好意思。今天早上才看到你留的言。不过你自己解决了。恭喜。
[解决办法]
如果要显示在两处,再写一个change函数,即可:


function change2(v){
var str= "0 ";
for(i=0;i <v;i++){ str+=( "_ "+(document.getElementById(t[i]).selectedIndex-1));};
var ss=document.getElementById(t[v]);
with(ss){
length = 0;
options[0]=new Option(opt0[v],opt0[v]);
if(v && document.getElementById(t[v-1]).selectedIndex> 0 || !v)
{
if(dsy.Exists(str)){
ar = dsy.Items[str];
for(i=0;i <ar.length;i++)options[length]=new Option(ar[i],ar[i]);
if(v)options[1].selected = true;
}
}
if(++v <s.length){change2(v);}


}
}
………………

var t=[ "t1 ", "t2 ", "t3 "];

………………
for(i=0;i <t.length-1;i++)
document.getElementById(t[i]).onchange=new Function( "change2( "+(i+1)+ ") ");
change2(0);

热点排行