转载省市县三级联动

不废话,上代码! 大神 勿喷!!!

<!--JSP代码-->
<tr>
                <td>地址:</td> <!--第一级:省 --> <td><select id="province" name="province" onchange="f1()"> <option>---请选择---</option> <!--第二级:市 --> </select> <select id="city" name="city" onclick="f2()"> <option>---请选择---</option> <!--第三级:县 --> </select> <select name="country" id="country"> <option>---请选择---</option> </select></td> </tr>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
//JS 代码
/*
 PID就是他的父ID  省的PID都是1,所以给后台传的的时候直接是1;返回一个JSON;大家都懂!
 这个得到了第一级的
*/
    $(function() { $.post("getSJLD.action", { pid : 1 }, function(data) { for ( var i in data) { var op = $("<option value='"+data[i].id+"'>" + data[i].cityname + "</option>"); $("#province").append(op); } }, "json" ) }) /*在下面我会解释为什么有 city 和 country (For:回显) 而且大家可以看到我在追加完之后有个判断; 那个是修改回显的时候用到的;单纯的出现是三级联动是用不到的 f2()同理 通过第一级得到第二级 $("#province").val()是第一级的ID;注意不是PID!!! */ function f1(city,country) { $.post("getSJLD.action", { pid : $("#province").val() }, function(data) { $("#city").empty(); for ( var i in data) { var op = $("<option id='city"+data[i].id+"' value='"+data[i].id+"'>" + data[i].cityname + "</option>"); $("#city").append(op); if(city!=null){ $("#city option").each(function(){ if($(this).text()==city){ $(this).attr("selected",true) } f2(country) }) } } }, "json") } //通过第二级获取到第三级 function f2(country) { $.post("getSJLD.action", { pid : $("#city").val() }, function(data) { $("#country").empty(); for ( var i in data) { var op = $("<option>" + data[i].cityname + "</option>"); $("#country").append(op); if(country!=null){ $("#country option").each(function(){ if($(this).text()==country){ $(this).attr("selected",true) } }) } } }, "json") }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 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
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

JS 获取三级联动的值:采用拼接的方式

var adr = "";
adr += $("#provinceoption:selected").text()+" "
                        + $("#city option:selected").text()+" "
                        + $("#country option:selected").text();
  • 1
  • 2
  • 3
  • 4
  • 5

大家可以看到我在每个取值的后面都加了一个+” ”
这个呢是为了修改的时候取值方便。直接用split(” “) 分割就OK了;

以上呢就是添加的
效果如图
这个就是完成的效果

添加成功以后的效果如图

这里写图片描述
因为在上面我取值的时候多加了一个 ” “!所有添加到数据库的时候就会就一个间隔

接下来就是修改回显了

首先我们要从数据库获取到值
因为我是用esayui做的 所以我的取值是这样的

这里写图片描述
取值就不用说。大家都会!
那么现在city就是我们取到的地址的值

      /*上面已经提到;在取到值得时候;因为添加的时候是" ";隔开添加的;
         所以我们在取到值 之后用  split(" ")  切割   
         citys[0] 呢就是 省 的值
         citys[1] 就是 市 的值
         citys[2] 就是 县 的值

           */
           var  citys=city.split(" ");

              $("#province option").each(function() { /*遍历省下拉框;判断下拉框值是否和取到的省的值相同; 相同就选中;选中之后紧接着就是第二级了;上面大家应该看到了 f1()代表第二级; 所以在选中之后进行f1() 并将 市 和 县 的值传过去; (县的值在f1()里面是不用的,是为了给f2()传过去的) */ if($(this).text()==citys[0]){ $(this).attr("selected",true); //var sheng = $(this).val(); f1(citys[1],citys[2]) } }) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

大家这个时候返回上面看第二级和第三级 联动那一块的判断代码
如图:
这里写图片描述

写到这里大家就应该清楚为什么要将 City 和 Country 给传过来了

第三级也是同理;便可回显!
这里写图片描述

好了!修改回显就完成了!
效果如图:

这里写图片描述

后台代码就是一个单表的查询
SELECT * FROM city WHERE pid = #{pid}
// #{pid}就是你传过去的值!

下面是表结构!
这个百度一大推!大同小异!方法是一样的!只要看好表结构知道怎么取值就行!

CREATE TABLE city (
id int(11) NOT NULL DEFAULT ‘0’,
pid int(11) DEFAULT NULL,
cityname varchar(255) CHARACTER SET utf8 DEFAULT NULL,
type int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


全部数据大家点击链接下载
具体链接: http://pan.baidu.com/s/1qXSHmc0 密码: vcaa
里面有sql文件!

猜你喜欢

转载自www.cnblogs.com/xiaohaigege666/p/9219033.html
今日推荐