Drupal实现省市下拉菜单联动的方法
by circleoflife on 周四, 10/16/2008 - 15:48
这两天遇到一个难题,就是实现中国的省市的下拉菜单联动功能,找了很多地方,像原来博客里面收藏的文章:
http://blue.live4all.co.il/~mooffie/cms/node/15 可以看到有不少方法可以实现。
但是这些方法都不是是需要Taxonomy,就是需要导入csv,我尝试了都不简单,后来想想可以使用jQuery来实现,实现效果还是不错的。下面一步一步来说一下:
1. 我以cck为例,假如你有一个字段需要这样的服务,首先配置好你的省市字段,就用普通的text dropdownlist就好了。
2. 随便找一个可以写入js代码的地方,我的做法是开一个空的block,然后只在这个页面显示,也可以想办法嵌入到那个form里面去,这样更好,不过block方法也还好,呵呵。
3. 在这个block里面输入javascript代码,我写的如下,呵呵,不好之处请批准指出:(一定记着把filter打开)
| <script language="javascript"> var cityList = new Array(34); cityList[0]="东城,西城,崇文,宣武,朝阳,丰台,石景山,海淀,门头沟,房山,通州,顺义,昌平,大兴,平谷,怀柔,密云,延庆" ; cityList[1]="黄浦,卢湾,徐汇,长宁,静安,普陀,闸北,虹口,杨浦,闵行,宝山,嘉定,浦东,金山,松江,青浦,南汇,奉贤,崇明" ; cityList[2]="和平,东丽,河东,西青,河西,津南,南开,北辰,河北,武清,红挢,塘沽,汉沽,大港,宁河,静海,宝坻,蓟县" ; cityList[3]="万州,涪陵,渝中,大渡口,江北,沙坪坝,九龙坡,南岸,北碚,万盛,双挢,渝北,巴南,黔江,长寿,綦江,潼南,铜梁,大足,荣昌,壁山,梁平,城口,丰都,垫江,武隆,忠县,开县,云阳,奉节,巫山,巫溪,石柱,秀山,酉阳,彭水,江津,合川,永川,南川" ; cityList[4]="石家庄,邯郸,邢台,保定,张家口,承德,廊坊,唐山,秦皇岛,沧州,衡水" ; cityList[5]="太原,大同,阳泉,长治,晋城,朔州,吕梁,忻州,晋中,临汾,运城" ; cityList[6]="呼和浩特,包头,乌海,赤峰,呼伦贝尔盟,阿拉善盟,哲里木盟,兴安盟,乌兰察布盟,锡林郭勒盟,巴彦淖尔盟,伊克昭盟" ; cityList[7]="沈阳,大连,鞍山,抚顺,本溪,丹东,锦州,营口,阜新,辽阳,盘锦,铁岭,朝阳,葫芦岛" ; cityList[8]="长春,吉林,四平,辽源,通化,白山,松原,白城,延边" ; cityList[9]="哈尔滨,齐齐哈尔,牡丹江,佳木斯,大庆,绥化,鹤岗,鸡西,黑河,双鸭山,伊春,七台河,大兴安岭" ; cityList[10]="南京,镇江,苏州,南通,扬州,盐城,徐州,连云港,常州,无锡,宿迁,泰州,淮安" ; cityList[11]="杭州,宁波,温州,嘉兴,湖州,绍兴,金华,衢州,舟山,台州,丽水" ; cityList[12]="合肥,芜湖,蚌埠,马鞍山,淮北,铜陵,安庆,黄山,滁州,宿州,池州,淮南,巢湖,阜阳,六安,宣城,亳州" ; cityList[13]="福州,厦门,莆田,三明,泉州,漳州,南平,龙岩,宁德" ; cityList[14]="南昌市,景德镇,九江,鹰潭,萍乡,新馀,赣州,吉安,宜春,抚州,上饶" ; cityList[15]="济南,青岛,淄博,枣庄,东营,烟台,潍坊,济宁,泰安,威海,日照,莱芜,临沂,德州,聊城,滨州,菏泽" ; cityList[16]="郑州,开封,洛阳,平顶山,安阳,鹤壁,新乡,焦作,濮阳,许昌,漯河,三门峡,南阳,商丘,信阳,周口,驻马店,济源" ; cityList[17]="武汉,宜昌,荆州,襄樊,黄石,荆门,黄冈,十堰,恩施,潜江,天门,仙桃,随州,咸宁,孝感,鄂州" ; cityList[18]="长沙,常德,株洲,湘潭,衡阳,岳阳,邵阳,益阳,娄底,怀化,郴州,永州,湘西,张家界" ; cityList[19]="广州,深圳,珠海,汕头,东莞,中山,佛山,韶关,江门,湛江,茂名,肇庆,惠州,梅州,汕尾,河源,阳江,清远,潮州,揭阳,云浮" ; cityList[20]="南宁,柳州,桂林,梧州,北海,防城港,钦州,贵港,玉林,南宁地区,柳州地区,贺州,百色,河池" ; cityList[21]="海口,三亚" ; cityList[22]="成都,绵阳,德阳,自贡,攀枝花,广元,内江,乐山,南充,宜宾,广安,达川,雅安,眉山,甘孜,凉山,泸州" ; cityList[23]="贵阳,六盘水,遵义,安顺,铜仁,黔西南,毕节,黔东南,黔南" ; cityList[24]="昆明,大理,曲靖,玉溪,昭通,楚雄,红河,文山,思茅,西双版纳,保山,德宏,丽江,怒江,迪庆,临沧" ; cityList[25]="拉萨,日喀则,山南,林芝,昌都,阿里,那曲" ; cityList[26]="西安,宝鸡,咸阳,铜川,渭南,延安,榆林,汉中,安康,商洛" ; cityList[27]="兰州,嘉峪关,金昌,白银,天水,酒泉,张掖,武威,定西,陇南,平凉,庆阳,临夏,甘南" ; cityList[28]="银川,石嘴山,吴忠,固原" ; cityList[29]="西宁,海东,海南,海北,黄南,玉树,果洛,海西" ; cityList[30]="乌鲁木齐,石河子,克拉玛依,伊犁,巴音郭勒,昌吉,克孜勒苏柯尔克孜,博 尔塔拉,吐鲁番,哈密,喀什,和田,阿克苏" ; cityList[31]="" ; cityList[32]="" ; cityList[33]="台北,高雄,台中,台南,屏东,南投,云林,新竹,彰化,苗栗,嘉义,花莲,桃园,宜兰,基隆,台东,金门,马祖,澎湖" ; $(document).ready(function() { //alert($("#edit-field--13-key")) $("#edit-field--13-key").change( function(){ //alert($("#edit-field--13-key option:selected").val()); var cities = cityList[$("#edit-field--13-key option:selected").val()].split(','); $("#edit-field--14-key").empty(); for(var i=0; i<cities.length; i++){ $("#edit-field--14-key").append('<option value='+i+'>'+cities[i]+'</option>'); } //alert(cityList[2]); }); }); </script> |
这样就可以实现联动了。
- circleoflife's blog
- 要发表评论,请先登录 或 注册
标签云
感谢您关注我的个人博客!
为了您的更好的阅读和留言,建议您注册用户,这样您可以获得更大的权限,以及更方便的留言。
注册只需要一分钟的时间。但是您需要提供您的邮箱。注册后,密码会自动发到您的邮箱,请在第一次登录时修改。
我承诺不会将您的Email泄露给他人,或者发送垃圾邮件。
哈哈我记得之前跟你讨论过这个问题。
我鼓捣了半天,最后还是用的你链的那个页面的方法实现的。
好像也不是特别麻烦。
其实有现成的module,但是我当时用了感觉不好用,有bug。