Ext.form.ComboBox实现省、市、县级联

1 篇文章 0 订阅
1 篇文章 0 订阅
          <span style="font-family: Arial, Helvetica, sans-serif; font-size: 13.3333339691162px; background-color: rgb(255, 255, 255);">	</span><span style="font-size:18px;font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><strong>使用Ext.form.ComboBox和后台数据库数据Ajax实现省、市、县三级级联。</strong></span>

           效果图:

一、 创建store  远程加载数源

<span style="font-size:18px;">	//创建stroeProvince 省份的数据源
	var stroeProvince= new Ext.data.Store({
	    proxy:{
	   	type:'ajax',                            // Ajax方式获取数据
	   	url:'GetRegionServlet?type=Province',   // /获取数据的路径 
	   	reader : {  
                 type : 'json',                 //返回数据类型为json格式
	   			  root : 'Province'             //数据
	   			}
	    },
	    fields :[{name:'ProID'},{name:'ProName'}]
	});
	//创建stroeCity 市的数据源
	var stroeCity=new Ext.data.Store({
		proxy:{
			type:'ajax',
			url:'GetRegionServlet?type=City',
				reader : {  
                 type : 'json',
			root : 'City'}
		},
		fields :[{name:'CityID'},{name:'CityName'}]
	});
	//创建stroeDistrict 区、县的数据源
	var stroeDistrict=new Ext.data.Store({
		proxy:{
			type:'ajax',
			url:'GetRegionServlet?type=District',
				reader : {  
                 type : 'json',
			root : 'District'}
		},
		fields :[{name:'Id'},{name:'DisName'}]
	});</span>



二、   创建ComboBox 绑定数据源到ComboBox 
<span style="font-size:18px;"><span style="white-space:pre">	</span>// 创建省份ComboBox
	var comboProvince= new Ext.form.ComboBox({
		store:stroeProvince,
		emptyText:'请选择',     //默认项
		mode:'local',           //数据请求方式
		triggerAction: 'all',   //设置成'all' 避免ComboBox使用autoComplete的效果,让每次选择都可以查看到所有的数据
        valueField: 'ProID',    //数据
        displayField: 'ProName',//显示数据
        editable: false,         //设置成false 避免用户输入无效信息
		renderTo: 'comboProvince' //渲染的地方
	});
	var comboCity=new Ext.form.ComboBox({
		store:stroeCity,
		emptyText:'请选择',
		mode:'local',
		triggerAction: 'all',
        valueField: 'CityID',
        displayField: 'CityName',
        editable: false,
		renderTo: 'comboCity'
	});
	var comboDistrict=new Ext.form.ComboBox({
		store:stroeDistrict,
		emptyText:'请选择',
		mode:'local',
		triggerAction: 'all',
        valueField: 'Id',
        displayField: 'DisName',
        editable: false,
		renderTo: 'comboDistrict'
	});</span>
三、 创建事件监听(远程)

<span style="font-weight: normal;"><span style="font-size:18px;">stroeProvince.load();
	//下面代码给三个ComboBox都设置了on()的事件监听。  使用到stroe.proxy.url 这步操作就会改变store内部数据
	//监听事件(远程)
	comboProvince.on('select',function(comboBox){
		var ProID=comboBox.getValue();
		stroeCity.proxy.url='GetRegionServlet?type=City&ProID=' + encodeURIComponent(encodeURIComponent(ProID));
		stroeCity.reload();
	});
	comboCity.on('select',function(comboBox){
		var CityID=comboBox.getValue();
		stroeDistrict.proxy.url='GetRegionServlet?type=District&CityID=' + encodeURIComponent(encodeURIComponent(CityID));
		stroeDistrict.reload();
	});
	comboDistrict.on('select',function(comboBox){
		alert(comboProvince.getRowValue()+'-'+comboCity.getRowValue()+'-'+comboDistrict.getRowValue());
	});
	//从上述代码可以看出,先执行stroeProvince.load();,将省份数据初始化。然后判断用户选择了省级信息的哪一项,
	// 取得数据后再调用市级ComboBox的load()函数去后台读取数据</span></span>
   

需要注意的是,因为Ajax默认的使用UTF-8编码传输数据,所以需要把编码格式都换成UTF-8编码格式,否则会出现乱码。 后台的request和response都需要进行处理,统一使用UTF-8编码。

主程序体很简单,先获得type的值,进而判断后面要读取省、市、县的哪一部分信息,根据type分别进入各自的流程。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值