zoukankan      html  css  js  c++  java
  • jquery --地区三级联动

      闲的无聊,把以前写过的一个地区三级联动重写了一下

      这是html部分

     1 <div>
     2     <input id="provinces" type="text" name="省">
     3     <ul id="pContent">
     4 
     5     </ul>
     6 </div>
     7 <div>
     8     <input id="citys" type="text" name="市">
     9     <ul id="cContent">
    10         
    11     </ul>
    12 </div>
    13 <div>
    14     <input id="districts" type="text" name="区/县">
    15     <ul id="dContent">
    16          
    17     </ul>
    18 </div>

      主要使用input作为显示,ul是地区列表,外层div作为定位父级

      看下样子

      

      很丑,确实很丑

      有功能就可以了,要啥自行车啊!

      接下来,看一下我们需要的数据格式

      

      

      每个数据格式分为三个大数组,Aprovinces(省份),Acitys(城市),Adistricts(地区),数组当中的每一项,是一个json,name是这个地区的名字,id是这个地区的id,pid是这个地区的上级地区的id。(例如:河南的id是16,那么郑州的pid就是16)

      下面是JS代码

      

     1 $(function(){
     2               function appendLi(arr,pid,id,ul){
     3                 // 接受四个参数,
     4                 // arr,一个是地区数据的数组
     5                 // pid,父级地区的id,用来筛选
     6                 // id ,对应要显示的input的id
     7                 // 父级ul的dom id 
     8                 var cStr = '';
     9                 for(var i = 0 ; i < arr.length ; i++){
    10                     if (arr[i].pid == pid) {
    11                         cStr+='<li input_id="'+id+'" pid="'+arr[i].pid+'" id="'+arr[i].id+'">'+arr[i].name+'</li>';
    12                     }
    13                 }
    14                 ul.html(cStr);
    15             }
    16 
    17             appendLi(Aprovinces,1,'provinces',$('#pContent'));
    18             appendLi(Acitys,1,'citys',$('#cContent'));
    19             appendLi(Adistricts,1,'districts',$('#dContent'));
    20 
    21             $('ul').on('click',function(ev){
    22                 var eve = ev || window.event;//获取事件对象
    23                 var target = ev.target || ev.srcElement; //拿到target
    24                 // 事件委托
    25                 if(target.nodeName.toLocaleLowerCase() == 'li'){
    26                     // 获取当前点击元素,并判断是不是li
    27                     var _this = $(target);//转为jquery对象,并且赋值给this
    28 
    29                     //拿到这个li身上的id,地区名字,对应的ul id,对应的input id,对应的父级地区的pid
    30                     var name = _this.text();
    31                     var input_id = _this.attr('input_id');
    32                     var pid = _this.attr('id');
    33                     var ul_id = _this.parent().attr('id');
    34                     $('#'+input_id).attr('value',name);
    35                     //将当前点击的li的内容,修改到input的内容
    36                     switch (ul_id){
    37                         //判断当前点击的ul是 省 还是市(地区/县)不需要判断,因为不在有联动效果
    38                         case 'pContent':
    39                             //如果是省份
    40                             appendLi(Acitys,pid,'citys',$('#cContent')); 
    41                             //加载li到 市级里面,注意第一个参数,传入的市级的数组
    42                             var firstLi = $('#cContent li').first();
    43                             //添加市级li完毕之后,市级ul里面的第一个li
    44                             var firstLi_pid = firstLi.attr('id');
    45                             //将第一个li的id作为pid,在进行地区的循环
    46                             //形成三级联动的效果
    47                             appendLi(Adistricts,firstLi_pid,'districts',$('#dContent'));
    48                             break;
    49                         case 'cContent':
    50                             // 如果点击的是市级地区,
    51                             // 则直接创建县级地区
    52                             appendLi(Adistricts,pid,'districts',$('#dContent'));
    53                             break;
    54                         default:
    55                             break;
    56                     }
    57                 }
    58                 
    59                 
    60             })
    61 
    62         })

        就是这样

  • 相关阅读:
    JSTL学习总结
    Spring 3 MVC: Create Hello World Application In Spring 3.0 MVC(reprint)
    如何查询端口号被哪个程序占用?
    php 共享内存
    php 消息队列
    php 快速fork出指定个子进程
    批量 kill mysql 中运行时间长的sql
    socket发送http请求
    TCP/IP、Http、Socket的区别
    文本协议和二进制协议
  • 原文地址:https://www.cnblogs.com/dongwy/p/7284763.html
Copyright © 2011-2022 走看看