用ExtJs做 省市区级联 的朋友遇到这样的问题没有?

madStone_l 2010-08-04 10:22:44
小弟级联效果已经做出来了,业务约束如下:
如果省份下面有城市,则城市必选;如果城市下面有区县,这区县必选。
另外一种情况,比如用户选择了“香港特别行政区”,由于没有市区,所以市区为空也可以保存。

所以只有省份ComboBox的allowBlank:false,城市和区县ComboBox的allowBlank:true;
我在保存事件中判断如果城市和区县
if (cityComb.getStore().getCount() != 0 && Ext.isEmpty(cityComb.getValue()))
{
cityComb.markInvalid('请选择城市');
return false;
}
if (cityDisComb.getStore().getCount() != 0 && Ext.isEmpty(cityDisComb.getValue()))
{
cityDisComb.markInvalid('请选择区/县');
return false;
}


程序判断没有问题,但是在用户实际操作时存在这样的问题:

当用户选择了省份后,城市的Store正在请求数据,还没有返回结果,这时的cityComb.getStore().getCount()就等于0,再点击保存就可以成功,但实际上城市加载完成后有相关数据。所以用户保存的数据就不完整。

我想问:

能能在保存的事件中判断城市和区县的Store是否正在加载状态,如果在加载状态,就提示用户数据正在加载。
我试过在城市和区县两个Store监听load事件,但达不到我想要的效果,不知高手在处理这方面的问题是怎么搞的?
...全文
699 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
asdujiayong 2010-08-05
  • 打赏
  • 举报
回复
省市区
当从后台加载省的时候,可以判断下每一省下是否有市,如果没有加一个属性isLeaf=false ;else isLeaf=true;
在前台如果用户点击某一省时只要在change事件中看下选中的isLeaf ,
if(isLeaf){cityComb.markInvalid('请选择城市');}
madStone_l 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zoujp_xyz 的回复:]
如果数据还没有加载完你可以让提交按钮灰掉,或用mask 遮罩起来。
[/Quote]
这位兄弟,你好!你的这个方法可行,我也想过。
但是在我的项目中不是很理想,因为我吧省市区级联扩展成了自己的控件,也就是把级联的方法自己封装了一次。

所以我现在从我的项目角度出发,最好的方法就是判断它的加载状态,Ext如果有这个方法最好,如果没有就还得用你的方法。

谢谢先。
madStone_l 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dragonsky_w 的回复:]
不好意思 ,代码发的急了,有点小错误,不过不是重要的,修改一下就好……
[/Quote]
兄弟,你的例子是本地数据。似乎不存在异步请求去后代去数据,所以就不会存在我遇到的数据延时问题。
不过,还是谢谢的热心回答。
zoujp_xyz 2010-08-04
  • 打赏
  • 举报
回复
如果数据还没有加载完你可以让提交按钮灰掉,或用mask 遮罩起来。
maomao90 2010-08-04
  • 打赏
  • 举报
回复
正在学习这个,不懂,帮你顶
cw_tkong 2010-08-04
  • 打赏
  • 举报
回复
http://download.csdn.net/source/2582751
以前发布的 使用XML和dwr ajax 集成实现省市级联菜单
zoujp_xyz 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 madstone_l 的回复:]

引用 1 楼 zoujp_xyz 的回复:
如果数据还没有加载完你可以让提交按钮灰掉,或用mask 遮罩起来。

这位兄弟,你好!你的这个方法可行,我也想过。
但是在我的项目中不是很理想,因为我吧省市区级联扩展成了自己的控件,也就是把级联的方法自己封装了一次。

所以我现在从我的项目角度出发,最好的方法就是判断它的加载状态,Ext如果有这个方法最好,如果没有就还得用你的方法。

……
[/Quote]
即使有一个判断状态的方法。同样可以点击保存按钮啊。或许这样?
if(flag){
alert(正在加载,请稍候保存!); // 感觉一样不好。
}
dragonsky_w 2010-08-04
  • 打赏
  • 举报
回复
不好意思 ,代码发的急了,有点小错误,不过不是重要的,修改一下就好……
dragonsky_w 2010-08-04
  • 打赏
  • 举报
回复
我有一个例子,当省没有选择的时候,市区是不可以选的,不知道符合你的要求不,代码如下:

var provinces = [
[01,'北京市'],[02,'天津市'],[03,'上海市'],[04,'重庆市'],[05,'辽宁省'],
[06,'黑龙江'],[07,'河北省'],[08,'河南省'],[09,'广东省'],[10,'吉林省'],
[11,'山西省'],[12,'山东省'],[13,'陕西省'],[14,'安徽省'],[15,'浙江省'],
[16,'福建省'],[17,'湖南省'],[18,'湖北省'],[19,'四川省'],[20,'甘肃省'],
[21,'青海省'],[22,'云南省'],[23,'江苏省'],[24,'江西省'],[25,'贵州省'],
[26,'海南省'],[27,'台湾省'],[28,'内蒙古自治区'],[29,'广西壮族自治区'],[30,'宁夏回族自治区'],
[31,'西藏自治区'],[32,'新疆维吾尔自治区'],[33,'香港特别行政区'],[34,'澳门特别行政区']
];

var cities = new Array(); // 市
cities[01] = [[001,'北京市']];
cities[02] = [[002,'天津市']];
cities[03] = [[003,'上海市']];
cities[04] = [[004,'重庆市']];
cities[05] = [ // 05 - 辽宁省
[005,'鞍山'],[006,'本溪'],[007,'朝阳'],[008,'大连'],[009,'丹东'],
[010,'抚顺'],[011,'阜新'],[012,'葫芦岛'],[013,'锦州'],[014,'辽阳'],
[015,'盘锦'],[016,'沈阳'],[017,'铁岭'],[018,'营口']
];
cities[06] = [ // 06 - 黑龙江
[019,'大庆'],[020,'大兴安岭'],[021,'哈尔滨'],[022,'鹤岗'],[023,'黑河'],
[024,'鸡西'],[025,'佳木斯'],[026,'牡丹江'],[027,'七台河'],[028,'齐齐哈尔'],
[029,'双鸭山'],[030,'绥化'],[031,'伊春']
];
cities[07] = [ // 07 - 河北省
[032,'保定'],[033,'沧州'],[034,'承德'],[035,'邯郸'],[036,'衡水'],[037,'廊坊'],
[038,'秦皇岛'],[039,'石家庄'],[040,'唐山'],[041,'邢台'],[042,'张家口']
];
cities[08] = [ // 08 - 河南省
[043,'安阳'],[044,'鹤壁'],[045,'济源'],[046,'焦作'],[047,'开封'],
[048,'洛阳'],[049,'南阳'],[050,'平顶山'],[051,'三门峡'],[052,'商丘'],
[053,'新乡'],[054,'信阳'],[90559,'许昌'],[056,'郑州'],[057,'周口'],
[058,'驻马店'],[059,'漯河'],[060,'濮阳']
];
cities[09] = [ // 09 - 广东省
[061,'潮州'],[062,'东莞'],[063,'佛山'],[064,'广州'],[065,'河源'],
[066,'惠州'],[067,'江门'],[068,'揭阳'],[069,'茂名'],[070,'梅州'],
[071,'清远'],[072,'汕头'],[073,'汕尾'],[074,'韶关'],[075,'深圳'],
[076,'阳江'],[077,'云浮'],[078,'湛江'],[079,'肇庆'],[080,'中山'],
[88,'珠海']];
cities[10] = [ // 10 - 吉林省
[081,'白城'],[082,'白山'],[083,'长春'],[084,'吉林'],[085,'辽源'],
[086,'四平'],[087,'松原'],[088,'通化'],[089,'延边朝鲜族自治州']];
cities[11] = [ // 11 - 山西省
[090,'长治'],[091,'大同'],[092,'晋城'],[093,'晋中'],[094,'临汾'],
[095,'吕梁'],[096,'朔州'],[097,'太原'],[098,'忻州'],[099,'阳泉'],
[77,'运城']
];
cities[12] = [ // 12 - 山东省
[100,'滨州'],[101,'德州'],[102,'东营'],[103,'菏泽'],[104,'济南'],
[105,'济宁'],[106,'莱芜'],[107,'聊城'],[108,'临沂'],[109,'青岛'],
[110,'日照'],[111,'泰安'],[112,'威海'],[113,'潍坊'],[114,'烟台'],
[115,'枣庄'],[116,'淄博']];
cities[13] = [ // 13 - 陕西省
[117,'安康'],[118,'宝鸡'],[119,'汉中'],[120,'商洛'],[121,'铜川'],
[122,'渭南'],[123,'西安'],[124,'咸阳'],[125,'延安'],[126,'榆林']
];
cities[14] = [ // 14 - 安徽省
[127,'安庆'],[128,'蚌埠'],[129,'巢湖'],[130,'池州'],[131,'滁州'],
[132,'阜阳'],[133,'合肥'],[134,'淮北'],[135,'淮南'],[136,'黄山'],
[137,'六安'],[138,'马鞍山'],[139,'宿州'],[140,'铜陵'],[141,'芜湖'],
[142,'宣城'],[143,'亳州']
];
cities[15] = [ // 15 - 浙江省
[144,'杭州'],[145,'湖州'],[146,'嘉兴'],[147,'金华'],[148,'丽水'],
[149,'宁波'],[150,'绍兴'],[151,'台州'],[152,'温州'],[153,'舟山'],
[66,'衢州']
];
cities[16] = [ // 16 - 福建省
[154,'福州'],[155,'龙岩'],[156,'南平'],[157,'宁德'],[158,'莆田'],
[159,'泉州'],[160,'三明'],[161,'厦门'],[162,'漳州']
];
cities[17] = [ // 17 - 湖南省
[163,'常德'],[164,'长沙'],[165,'郴州'],[166,'衡阳'],[167,'怀化'],
[168,'娄底'],[169,'邵阳'],[170,'湘潭'],[171,'益阳'],[172,'永州'],
[173,'岳阳'],[174,'张家界'],[175,'株洲'],[176,'湘西土家族苗族自治州']
];
cities[18] = [ // 18 - 湖北省
[177,'鄂州'],[178,'黄冈'],[179,'黄石'],[180,'荆门'],[181,'荆州'],
[182,'潜江'],[183,'随州'],[184,'十堰'],[185,'天门'],[186,'武汉'],
[187,'仙桃'],[188,'襄樊'],[189,'咸宁'],[190,'孝感'],[191,'宜昌'],
[99,'神农架林区'],[77,'恩施土家族苗族自治州'],
];
cities[19] = [ // 19 - 四川省
[192,'巴中'],[193,'成都'],[194,'达州'],[195,'德阳'],[196,'广安'],
[197,'广元'],[198,'乐山'],[199,'眉山'],[200,'绵阳'],[201,'南充'],
[202,'内江'],[203,'攀枝花'],[204,'遂宁'],[205,'雅安'],[206,'宜宾'],
[207,'资阳'],[208,'自贡'],[209,'泸州'],[210,'凉山彝族自治州'],
[211,'甘孜藏族自治州'],[212,'阿坝藏族羌族自治州']
];
cities[20] = [ // 20 - 甘肃省
[213,'白银'],[214,'定西'],[215,'嘉峪关'],[216,'金昌'],[77,'酒泉'],
[217,'兰州'],[218,'陇南'],[219,'平凉'],[220,'庆阳'],[221,'天水'],
[222,'武威'],[223,'张掖'],[224,'甘南藏族自治州'],[225,'临夏回族自治州']
];
cities[21] = [ // 21 - 青海省
[226,'海东'],[227,'西宁'],[228,'果洛藏族自治州'],[229,'海北藏族自治州'],[230,'海南藏族自治州'],
[231,'黄南藏族自治州'],[232,'海西蒙古族藏族自治州'],[233,'玉树藏族自治州']
];
cities[22] = [ // 22 - 云南省
[234,'保山'],[235,'昆明'],[236,'丽江'],[237,'临沧'],[238,'曲靖'],
[239,'思茅'],[240,'玉溪'],[241,'昭通'],[242,'楚雄彝族自治州'],[243,'大理白族自治州'],
[244,'德宏傣族景颇族自治州'],[245,'红河哈尼族彝族自治州'],[246,'迪庆藏族自治州'],
[247,'怒江傈傈族自治州'],[248,'文山壮族苗族自治州'],[249,'西双版纳傣族自治州']
];
cities[23] = [ // 23 - 江苏省
[250,'常州'],[251,'淮安'],[252,'连云港'],[253,'南京'],[254,'南通'],
[255,'苏州'],[256,'宿迁'],[257,'泰州'],[258,'无锡'],[259,'徐州'],
[260,'盐城'],[261,'扬州'],[262,'镇江']
];
cities[24] = [ // 24 - 江西省
[263,'抚州'],[264,'赣州'],[265,'吉安'],[266,'景德镇'],[267,'九江'],
[268,'南昌'],[269,'萍乡'],[270,'上饶'],[271,'新余'],[272,'宜春'],
[66,'鹰潭']
];
cities[25] = [ // 25 - 贵州省
[273,'安顺'],[274,'毕节'],[275,'贵阳'],[276,'六盘水'],[277,'铜仁'],[278,'遵义'],
[279,'黔东南苗族侗族自治州'],[280,'黔南布依族苗族自治州'],[281,'黔西南布依族苗族自治州']
];
cities[26] = [ // 26 - 海南省
[282,'海口'],[283,'白沙'],[284,'保亭'],[285,'昌江'],[286,'澄迈'],
[287,'儋州'],[288,'定安'],[289,'东方'],[290,'乐东'],[291,'临高'],
[292,'陵水'],[293,'南沙群岛'],[294,'琼海'],[295,'琼中'],[296,'三亚'],
[297,'屯昌'],[298,'万宁'],[299,'文昌'],[300,'五指山'],[301,'西沙群岛'],
[66,'中沙群岛']
];
cities[27] = [ // 17 - 台湾省
[302,'台北'],[303,'阿莲'],[304,'安定'],[305,'安平'],[306,'八德'],
[307,'八里'],[308,'白河'],[309,'白沙'],[310,'板桥'],[311,'褒忠'],
[312,'宝山'],[313,'卑南'],[314,'北斗'],[315,'北港'],[316,'北门'],
[317,'北埔'],[318,'北投'],[319,'补子'],[320,'布袋'],[321,'草屯'],
[322,'长宾'],[323,'长治'],[324,'潮州'],[325,'车城'],[326,'成功'],
[327,'城中区'],[328,'池上'],[329,'春日'],[330,'刺桐'],[331,'高雄'],
[332,'花莲'],[333,'基隆'],[334,'嘉义'],[335,'苗栗'],[336,'南投'],
[337,'屏东'],[338,'台东'],[339,'台南'],[340,'台中'],[341,'桃园'],
[342,'新竹'],[343,'宜兰'],[344,'彰化']
];
cities[28] = [ // 28 - 内蒙古自治区
[345,'阿拉善盟'],[346,'巴彦淖尔盟'],[347,'包头'],[348,'赤峰'],[349,'鄂尔多斯'],
[350,'呼和浩特'],[351,'呼伦贝尔'],[352,'通辽'],[353,'乌海'],[354,'乌兰察布盟'],
[355,'锡林郭勒盟'],[356,'兴安盟']
];
cities[29] = [ // 19 - 广西壮族自治区
[357,'百色'],[358,'北海'],[359,'崇左'],[360,'防城港'],[361,'桂林'],
[362,'贵港'],[363,'河池'],[364,'贺州'],[365,'来宾'],[366,'柳州'],
[367,'南宁'],[368,'钦州'],[369,'梧州'],[370,'玉林']
];
cities[30] = [ // 30 - 宁夏回族自治区
[371,'固原'],[372,'石嘴山'],[373,'吴忠'],[374,'银川']
];
cities[31] = [ // 31 - 西藏自治区
[375,'阿里'],[376,'昌都'],[377,'拉萨'],[378,'林芝'],[379,'那曲'],
[380,'日喀则'],[381,'山南']
];
cities[32] = [ // 32 - 新疆维吾尔自治区
[382,'乌鲁木齐'],[383,'阿克苏'],[384,'阿拉尔'],[385,'阿勒泰'],[386,'巴音郭楞'],
[387,'博尔塔拉'],[388,'昌吉'],[389,'哈密'],[390,'和田'],[391,'喀什'],
[392,'克拉玛依'],[393,'克孜勒苏柯尔克孜'],[394,'石河子'],[395,'塔城'],[396,'图木舒克'],
[397,'吐鲁番'],[398,'五家渠'],[399,'伊犁']
];
cities[33] = [ // 33 - 香港特别行政区
[400,'北区'],[401,'大埔区'],[402,'东区'],[403,'观塘区'],[404,'黄大仙区'],
[405,'九龙'],[406,'葵青区'],[407,'离岛区'],[408,'南区'],[409,'荃湾区'],
[410,'沙田区'],[411,'深水埗区'],[412,'屯门区'],[413,'湾仔区'],[414,'西贡区'],
[415,'香港'],[416,'新界'],[417,'油尖旺区'],[418,'元朗区'],[419,'中西区']
];
cities[34] = [[420,'澳门']]; // 34 - 澳门特别行政区
// 省下拉框
var comboProvinces = new Ext.form.ComboBox({
store: new Ext.data.SimpleStore( {
fields: ["provinceId", "provinceName"],
data: provinces
}),
listeners:{
select:function(combo, record,index){
comboCities.clearValue();
comboCities.store.loadData(cities[record.data.provinceId]);
}
},
valueField :"provinceId",
displayField: "provinceName",
mode: 'local',
forceSelection: true,
blankText:'请选择省份!',
emptyText:'--- 请选择省份 ---',
hiddenName:'provinceId',
editable: false,
triggerAction: 'all',
allowBlank:false,
fieldLabel: '所在城市',
name: 'provinceId',
width: 150
});
// 市下拉框
var comboCities = new Ext.form.ComboBox({
store: new Ext.data.SimpleStore( {
fields: ["cityId",'cityName'],
data:[]
}),
valueField :"cityId",
displayField: "cityName",
mode: 'local',
forceSelection: true,
blankText:'请选择城市!',
emptyText:'--- 请选择城市 ---',
hiddenName:'cityId',
editable: false,
triggerAction: 'all',
allowBlank:false,
fieldLabel: '',
name: 'cityId',
width: 150
});


var userInfoForm = new Ext.form.FormPanel({
labelAlign: 'left',
title: '省市级联,
bodyStyle: 'padding:5px',
width: 670,
frame: true,
modal: true,
renderTo:'userInfoForm',
labelWidth: 80,
buttonAlign:'center',
closeAction:'hide',
items: [{
xtype: 'fieldset',
title: '基本信息',
layout: 'column',
height: '100%',
items: [{
columnWidth: .5,
layout: 'form',
border: false,
items: [comboProvinces]
}, {
columnWidth: .5,
layout: 'form',
border: false,
items: [comboCities]
}],
buttons: [{
text: '确定,
handler: function() {……}
}, {
text: '取消',
handler: function (){……}
}]
});
hoojo 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 madstone_l 的回复:]
小弟级联效果已经做出来了,业务约束如下:
如果省份下面有城市,则城市必选;如果城市下面有区县,这区县必选。
另外一种情况,比如用户选择了“香港特别行政区”,由于没有市区,所以市区为空也可以保存。

所以只有省份ComboBox的allowBlank:false,城市和区县ComboBox的allowBlank:true;
我在保存事件中判断如果城市和区县
JScript code
i……
[/Quote]

那就在store中添加 beforeload 事件在加载之前提示正在加载
当store加载完成也就是this.store.getCount() 返回有数据的情况下才能提交

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧