用javascript实现网页地区选择功能
页面中引用DQloader.js,先看下在Html中是怎么写的
<!DOCTYPE html/>
<html>
<head>
<title>地区加载JS示例代码 power by www.ops.cc </title>
<script type="text/javascript" src="/scripts/DQLoader.js"></script>
<script type="text/javascript">
window.onload=function(){
var c=new DQLoader({
pe: document.getElementById("p"), //省select
ce: document.getElementById("c"), //市select
ae: document.getElementById("a"), //区select
data:new Array('福建省','厦门市','海沧区'), //默认值
defaultText:null, //未选择的文字说明:如:请选择
func:function(x){ //回执函数,x为返回的结果
var name=x.pname+","+x.cname+","+x.aname;
var id=x.pid+","+x.cid+","+x.aid;
//选取之后隐藏
alert('获取的地区为:'+name+'\r\n获取的地区ID:'+id);
}
});
//初始化
c.init();
}
</script>
</head>
<body>
<select id="p">
<option>不限</option>
</select>省<select id="c"><option>不限</option></select>市
<select id="a"><option>不限</option></select>(区/县)
</body>
</html>

DQLoader.js内置全国的区域数据
DQLoader.js对地区数据操作的代码如下:
/*
* DQLoader.js 地区加载
* Copyright 2010 OPS,All rights reseved!
* author : newmin http://b.ops.cc
* date : 2010/11/25
*/
var _script=document.createElement("script");
_script.type="text/javascript";
_script.src="DQdata.js";
var _$header=document.getElementsByTagName("head")[0];
_$header.insertBefore(_script,_$header.childNodes[0]);
/* USE Global variable DQdata; */
function DQLoader(data){
/*
* data format:{pe:*,ce:*,ae:*,value:'',defaultText:'请选择',func}
* pe:province element
* ce:city element
* ae:area element
*/
this.pe=data.pe;
this.ce=data.ce;
this.ae=data.ae;
this.defaultText=data.defaultText;
this.data=data.data;
this.func=data.func;
}
DQLoader.prototype.init=function(){
var _t=this;
/************* 定义填充Dom方法 ************************/
var fill=function(elem,data){
/* 添加dom方法 */
var f=function(value,text){
var opt=document.createElement("option");
opt.setAttribute("value",value);
opt.innerHTML=text;
elem.appendChild(opt);
};
/* 清空option */
elem.innerHTML="";
/* 加载默认值 */
if(_t.defaultText){f('',_t.defaultText);}
/* 加载数据 */
for(var i in data)f(data[i].id,data[i].name);
};
/*********** 为Elements添加onchange事件****************/
this.pe.onchange=function(){fill(_t.ce,_t.defaultText&&this.selectedIndex==0?null:DQdata[_t.defaultText?this.selectedIndex-1:this.selectedIndex].citys); _t.ce.onchange();};
this.ce.onchange=function(){fill(_t.ae,_t.defaultText&&this.selectedIndex==0?null:DQdata[_t.defaultText?_t.pe.selectedIndex-1:_t.pe.selectedIndex].citys[_t.defaultText?this.selectedIndex-1:this.selectedIndex].dis);_t.ae.onchange();};
this.ae.onchange=function(){
if(_t.func){
/* 获取选择的结果 */
var result={
pid:_t.pe.options[_t.pe.selectedIndex].value,
pname:_t.pe.options[_t.pe.selectedIndex].innerHTML,
cid:_t.ce.options[_t.ce.selectedIndex].value,
cname:_t.ce.options[_t.ce.selectedIndex].innerHTML,
aid:_t.ae.options[_t.ae.selectedIndex].value,
aname:_t.ae.options[_t.ae.selectedIndex].innerHTML
};
_t.func(result);
}
};
/************* 初始化数据 *********************/
fill(this.pe,DQdata);
if(!this.data)this.pe.onchange();
else{
for(var i=0;i<DQdata.length;i++){
/* 设置pe状态 */
if(this.data[0]==DQdata[i].name){
this.pe.value=DQdata[i].id;
this.pe.onchange();
/* 设置ce状态 */
for(var j=0;j<DQdata[i].citys.length;j++){
if(this.data[1]==DQdata[i].citys[j].name){
this.ce.value=DQdata[i].citys[j].id;
this.ce.onchange();
/* 设置ae状态 */
for(var k=0;k<DQdata[i].citys[j].dis.length;k++){
if(this.data[2]==DQdata[i].citys[j].dis[k].name){
this.ae.value=DQdata[i].citys[j].dis[k].id;
this.ae.onchange();
}
}
}
}
}
}
}
}
我将代码压缩到了一个单文件中, 你可以点击以下链接下载源代码和压缩后的代码
原创文章转载请注明链接地址:http://www.ops.cc/newmin/archive/2010/11/26/js-area-loader.html
原创内容请您保留出处及地址 , 主页:展益
浙公网安备 33010602011771号