级联效果预览
1.测试页面index.html
<html>
<head>
<title>省市区三级级联</title>
<script type="text/javascript" src="cascade.js"></script>
<script type="text/javascript">
xn.init(['省','市','区','name']);
xn.init(['provinces','citys','countys','code']);
</script>
</head>
<body>
<div id="txtHint"></div>
<select id="省"></select><select id="市"></select><select id="区"></select><br/>
<select id="provinces"></select><select id="citys"></select><select id="countys"></select>
</body>
</html>
2.脚本cascade.1.0.3.js
/***************************************************************************** JavaScript Document @author 陈小尼 @version v1.3 加载xml文档 可以在IE5+, FireFox, Chrome, Opera, Safari浏览器运行 使用方法: 将代表省、市、区的select的id以数组的形式给xn.init()方法[如:xn.init(['province','city','county','code'])]. 实例: <html> <head> <title>PCC省市区级联</title> <script type="text/javascript" src="cascade.js"></script> <script type="text/javascript"> xn.init(['province','city','county','code']); </script> </head> <body> <select id="province"></select><select id="city"></select><select id="county"></select> </body> </html> 修改了在Chrome加载不成功的问题 /****************************************************************************/ var xn=new Object(); xn.init=function(a){ var xmldoc; if (window.XMLHttpRequest){// code for IE7+, FireFox, Chrome, Opera, Safari xmldoc = new XMLHttpRequest(); }else { // code for IE6, IE5 xmldoc = new ActiveXObject("Microsoft.XMLHTTP"); } xmldoc.onreadystatechange=function(){ if (xmldoc.readyState == 4){ if( xmldoc.status == 200){ d = xmldoc.responseXML; getCascade(a,d); }else{ xn.init(a) } } }; xmldoc.open("GET","GBT0011-2011.xml",true); xmldoc.send(); } function getCascade(a,d){ var province=document.getElementById(a[0]); var city=document.getElementById(a[1]); var county=document.getElementById(a[2]); //初始化级联框 var pro=d.getElementsByTagName("province"); for(i=0;i<pro.length;i++){ var oOption=new Option(pro[i].getAttribute('name'),pro[i].getAttribute(a[3])); province.options.add(oOption); if(province.value==pro[i].getAttribute(a[3])){ var cit=pro[i].getElementsByTagName("city"); for(j=0;j<cit.length;j++){ var oOption=new Option(cit[j].getAttribute('name'),cit[j].getAttribute(a[3])); city.options.add(oOption); if(city.value==cit[j].getAttribute(a[3])){ var cou=cit[j].getElementsByTagName('county'); for(k=0;k<cou.length;k++){ var oOption=new Option(cou[k].getAttribute('name'),cou[k].getAttribute(a[3])); county.options.add(oOption); } } } } } //省菜单onchange province.οnchange=function(){ city.options.length=null; county.options.length=null; for(i=0;i<pro.length;i++){ if(province.value==pro[i].getAttribute(a[3])){ var cit=pro[i].getElementsByTagName("city"); for(j=0;j<cit.length;j++){ var oOption=new Option(cit[j].getAttribute('name'),cit[j].getAttribute(a[3])); city.options.add(oOption); if(city.value==cit[j].getAttribute(a[3])){ var cou=cit[j].getElementsByTagName('county'); for(k=0;k<cou.length;k++){ var oOption=new Option(cou[k].getAttribute('name'),cou[k].getAttribute(a[3])); county.options.add(oOption); } } } } } }; //市菜单onchange city.οnchange=function(){ var cityval=city.value; city.options.length=null; for(i=0;i<pro.length;i++){ if(province.value==pro[i].getAttribute(a[3])){ var cit=pro[i].getElementsByTagName("city"); for(j=0;j<cit.length;j++){ var oOption=new Option(cit[j].getAttribute('name'),cit[j].getAttribute(a[3])); city.options.add(oOption); city.value=cityval; if(city.value==cit[j].getAttribute(a[3])){ county.options.length=null; var cou=cit[j].getElementsByTagName('county'); for(k=0;k<cou.length;k++){ var oOption=new Option(cou[k].getAttribute('name'),cou[k].getAttribute(a[3])); county.options.add(oOption); } } } } } }; }
3.资源文件20111031.xml
文件内容过长放在cascade.rar文件中
地市县的地区会有稍微变化,等待更新......
4.注:由于读取xml的文件用的是AJAX,所以解压后的文件直接运行没有效果,建议将其放到服务器中测试或使用.