`
freshflower
  • 浏览: 188248 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【Jquery插件】下拉框三级联动选择 省市区三级联动选择

阅读更多

     省市区三级联动选择, 在我们开发中很常见, 下一级的下拉框数据与上一级的下拉框的值紧密相关, 所以需要我们处理的时候格外小心, 及时清理数据, 异步加载数据时再去绑定值不容半点马虎.

      我今天给大家分享一个比较通用的Js插件, 虽然叫JQuery插件, 但也只是引用到了它一般的方法, 并非底层. 这个插件除了省市区外, 还可以根据自己的意思灵活配置成你想要的三级联动或二级联动.

 

插件的下载地址: http://download.csdn.net/download/freshflower/8748521 (赚点小积分, 嘿嘿)

 

引入Jquery, 再引入插件. 然后我来讲解一下使用方法

 

// 初始化实例
var obj = $.cascade({
   container: { first: '#firstid', second: '#secondid', third: '#thirdid' },
   method: 'post',
   cache: true,
   local: false,  //是否取本地数据: true:则需设置dataJson; false:则需设置dataUrl取服务器上的数据. (推荐取服务器的数据)
   dataUrl: { first: '/url/province', second: '/url/city?province=', third: '/url/area?city=' },  //这里的URL地址根据你的实际情况设定
   field: {
       first: { text: 'areaname', value: 'areacode' },
       second: { text: 'areaname', value: 'areacode' },
       third: { text: 'areaname', value: 'areacode' }
   },
   options: {
       first: { text: 'Please Choose', value: '' },
       second: { text: '所有城市', value: '-' }, //在下拉控件上显示"所有城市"的项, 其值为"-"
       third: { text: '', value: '' }  //为空表示只显示数据项
   },
   startText: ['浙江省', '杭州市', '西湖区'],     //起始加载省市区的
   startValue: ['10', '100571', '10057103']    //起始加载的值(与startText二选一, 优先使用startValue)
});

// 方法调用 可调用的方法就只有这两个, 其他方法为函数内部方法.
// 这两个方法主要优点在于一次性设定, 无需考虑异步的情况, 他会自动去处理异步加载.
// 1. 设置选中值: 
obj.setValues(['10', '100571', '10057103']);  //依照数组的值依次设定 一级下拉框,二级下拉框, 三级下拉框的值
// 2. 设置选中文本: 
obj.setTexts(['浙江省', '杭州市']);  //依照数组的值依次设定 一级下拉框,二级下拉框的选中文本, (三级下拉框不设定,默认第一个选项)

 

 重点讲根据URL来获取服务器数据, 除一级下拉框对应的数据URL不额外加参数外,另外两个都会根据上一下拉框所选中的值来请求数据, 例如: 省份选择了浙江省, 那么就要拉取浙江省下的所有城市, 这时, dataUrl.second就会将省份中选中的值当成参数向服务器请求数据. (如上下的数据就会得到"/url/city?province=10"这个地址, 同理城市选择了杭州市, 就会得到第三级数据的请求地址: "/url/area?city=100571")

 服务器返回数据格式如下, 必须是JSON数组 

//获取到所有的省份
//json中的areacode,与areaname字段名称可根据自身的需要写,只要相关配置到初始化时的参数中的field中即可.
[
 {"areacode": 10, "areaname": "浙江省"},
 {"areacode": 11, "areaname": "北京市"},
 {"areacode": 12, "areaname": "天津市"},
 {"areacode": 13, "areaname": "河北省"},
 {"areacode": 14, "areaname": "山西省"}, 
 {"areacode": 15, "areaname": "内蒙古自治区"} //,{...}省略很多
]
//------我---是---分---隔----线-------------
//获取到浙江省下面的市的数据, (获取某个城市下的行政区就不用再枚举了,结构是一样的)
[
 {"areacode": 100570, "areaname": "衢州市"}, 
 {"areacode": 100571, "areaname": "杭州市"}, 
 {"areacode": 100572, "areaname": "湖州市"}, 
 {"areacode": 100573, "areaname": "嘉兴市"}, 
 {"areacode": 100574, "areaname": "宁波市"}, 
 {"areacode": 100575, "areaname": "绍兴市"}, 
 {"areacode": 100576, "areaname": "台州市"}, 
 {"areacode": 100577, "areaname": "温州市"}, 
 {"areacode": 100578, "areaname": "丽水市"}, 
 {"areacode": 100579, "areaname": "金华市"}, 
 {"areacode": 100580, "areaname": "舟山市"}
]

 

 如果你想取本地的数据, 那么在函数初始化时, 必须初始化其本地数据dataJson, 格式如下:

dataJson ={"first": [  /* first必须是数组,所有省份列表 */
 {"areacode": 10, "areaname": "浙江省"},
 {"areacode": 11, "areaname": "北京市"},
 {"areacode": 12, "areaname": "天津市"},
 {"areacode": 13, "areaname": "河北省"},
 {"areacode": 14, "areaname": "山西省"}, 
 {"areacode": 15, "areaname": "内蒙古自治区"} //,{...}省略很多
], 
"second": {  /* 枚举所有的城市 */
   "10":[{"areacode": 100570, "areaname": "衢州市"},{"areacode": 100571, "areaname": "杭州市"}/*,省略很多, 这里的10指first中areacode=10的项,以其值作为key,那么value就是城市列表的数组 */  ],
   "11": [{"areacode":11010,"areaname":"北京市"}]
},

"third": {   /* 枚举出所有城市下所有的地区 */
   "100571":[{"areacode": 10057101, "areaname": "上城区"}, {"areacode": 10057102, "areaname": "下城区"}, {"areacode": 10057103, "areaname": "西湖区"}]
  /* "100572":[{...},{...}], 省略很多很多.... */
} //综合起来,数据量太大了, 不是好事, 所以不推荐使用.
 
最后再订个例子出来:
<!-- 引入两个必要的JS文件 -->
<script type="text/javascript" src="jQuery.min.js"></script>
<script type="text/javascript" src="cascade.js"></script>

<div class="span4" style="text-align: right; width: 95%">
    <form action="" id="frompagelist" class="form-horizontal ">
        <span>第一组选择器:</span>
        <select id="p_s" style="width:100px;"></select>
        <select id="p_c" style="width:100px;"></select>
        <select id="p_a" style="width:100px;"></select>

        <span style="margin:0px 20px;"></span>
        <span>第二组选择器:</span>
        <select name="province" style="width:100px;"></select>
        <select class="cityclass" style="width:100px;"></select>
        <select id="a_a" style="width:100px;"></select>

        <input type="button" value="选定浙江省" onclick="chooseArea()">
    </form>
</div>

<script type="text/javascript">
    $(document).ready(function(){
        initAreaSelector()
    });
    
    var secondSelector = null;
    function initAreaSelector(){
        //第一组初始化
        $.cascade({
            container: { first: '#p_s', second: '#p_c', third: '#p_a' },
            dataUrl: {
                first: '/Area/GetArea1',
                second: '/Area/GetArea2?area1=',
                third: '/Area/GetArea3?area2='
            },
            field: {
                first: { text: 'areaname', value: 'areacode' },
                second: { text: 'areaname', value: 'areacode' },
                third: { text: 'areaname', value: 'areacode' }
            },
            options: {
                first: { text: '请选择', value: '' },
                second: { text: '所有城市', value: '' },
                third: { text: '所有地区', value: '' }
            },
            startText: ['广东省', '深圳市', '南山区']
        }); 

        //第二组
        secondSelector = $.cascade({
            container: { first: 'select[name="province"]', second: 'select.cityclass', third: '#p_a' },
            dataUrl: {
                first: '/Area/GetArea1',
                second: '/Area/GetArea2?area1=',
                third: '/Area/GetArea3?area2='
            },
            field: {
                first: { text: 'areaname', value: 'areacode' },
                second: { text: 'areaname', value: 'areacode' },
                third: { text: 'areaname', value: 'areacode' }
            },
            startText: ['江西省', '南昌市', '东湖区'] //也可以用 startValue来代替
        }); 
    }

    function chooseArea(){
        secondSelector.setTexts(['浙江省', '杭州市', '西湖区']);
        // or:
        // secondSelector.setValues(['10', '100571', '10057103']);
    }
</script>
 
最后, 这个插件可以应用到很多三级联动或两级联动选择, 并不局限于省市区的选择, 这里只是拿他来做为一个示例, 希望朋友们多多支持, 有错误的地方, 欢迎提出来.
 本文章为原创,转载请注明出处: http://freshflower.iteye.com/blogs/2215049
分享到:
评论

相关推荐

    jQuery弹出式下拉框省市区三级联动地区选择插件

    总的来说,这个"jQuery弹出式下拉框省市区三级联动地区选择插件"利用jQuery实现了高效、流畅的地区选择体验,通过预加载的地区数据实现了三级联动效果,而`index.html`、`js`和`img`文件则分别提供了页面结构、功能...

    省份城市区县_下拉框三级联动选择

    在IT行业中,尤其是在网页开发和前端交互设计领域,"省份城市区县_下拉框三级联动选择"是一种常见的用户界面设计模式。这种设计主要用于让用户在输入地址或选择地理位置时,通过三个相互关联的下拉框依次选取省份、...

    jQuery模拟select下拉框三级城市联动代码.zip

    这个"jQuery模拟select下拉框三级城市联动代码.zip"压缩包提供的就是一个使用jQuery库来实现这种效果的示例。这里我们将深入探讨相关知识点。 首先,jQuery是一个广泛使用的JavaScript库,它简化了DOM操作、事件...

    jQuery省市区三级联动

    在网页开发中,"jQuery省市区三级联动"是一种常见的交互设计,主要用于地址选择或区域筛选。这个功能使得用户能够方便地从省级、市级到区县级逐级选择,提高用户体验。以下将详细介绍该技术的核心概念、实现原理以及...

    jQuery省市区三级联动下拉框.zip

    这个“jQuery省市区三级联动下拉框”是一个利用jQuery库实现的解决方案,它基于jQuery 1.8.2的迷你版本(jquery-1.8.2.min.js)进行构建。下面我们将详细探讨这一技术实现及其相关知识点。 首先,jQuery是一个广泛...

    jQuery弹出式下拉框省市区三级联动地区选择插件.zip

    《jQuery弹出式下拉框省市区三级联动地区选择插件》 在Web开发中,尤其是在构建用户界面时,提供省市区三级联动的选择功能是非常常见的需求。这种功能能够帮助用户快速定位并选择他们的所在地,提高了用户体验。...

    jQuery省市区三级联动插件

    **jQuery省市区三级联动插件**是一种常见的前端开发技术,用于在网页上实现省、市、区(县)的联动选择效果。这种效果通常应用于地址输入、订单填写等场景,可以方便用户快速选择地理位置,提高用户体验。在...

    带select下拉选择框美化的jQuery省市区三级联动插件

    带select下拉选择框美化的jQuery省市区三级联动插件,网络上很多城市三级联动选择插件,但是 大部分是采用传统的select下拉框选择,本插件利用ul模拟美化select选择框,界面还是很不错的 最终选择的值会赋值到隐藏...

    Jquery实现省市区三级联动多选.zip

    "Jquery实现省市区三级联动多选"是一个典型的前端技术应用,它解决了传统二级联动或三级联动一对一模式的问题,引入了多选功能,使得用户在选择省市区时可以有更大的自由度。 一、jQuery简介 jQuery是一个快速、...

    jQuery json省市区街道四级联动地址选择插件

    **jQuery JSON 省市区街道四级联动地址选择插件** 在网页开发中,尤其是在电子商务网站或者需要用户填写详细地址的应用中,四级联动地址选择插件是一个常见且实用的功能。它通常包括省、市、区(县)和街道四个级别...

    Layui省市三级联动.rar

    4. **联动逻辑**:当用户在省市区选择中改变某一级时,通过jQuery获取选中的值,然后根据这个值动态更新下一级的选项。例如,当省份改变时,根据省份id请求对应城市的列表,然后填充到城市下拉框中。 5. **事件绑定...

    jQuery省市区三级联动百度地图分区代码

    在这个“jQuery省市区三级联动百度地图分区代码”项目中,开发者利用jQuery来实现一个交互式的地图功能,使得用户可以在选择省份后,自动筛选出相应的市和区,进一步增强用户体验。 首先,我们需要理解“三级联动”...

    php+mysql+jquery省市区三级联动+2014省市数据库

    在IT行业中,省市区三级联动是一种常见的前端交互功能,它用于在用户选择省份时自动更新市、区下拉框的内容,以实现动态筛选。这个压缩包文件“php+mysql+jquery省市区三级联动+2014省市数据库”提供了一个完整的...

    强大的jQuery省市区城市三级联动插件

    **jQuery省市区城市三级...总的来说,这款jQuery省市区城市三级联动插件凭借其强大的功能和易用性,为Web开发者提供了一种高效解决地区选择问题的方案。只需简单的配置和调用,就能快速集成到项目中,提升用户体验。

    jQuery实现select省市区三级联动下拉框.zip

    实现效果: jQuery实现select省市区三级联动下拉框,通过选择省,市区的值随之变化,非常适用于企业网站或者商城网站,用户在注册的时候填写的信息。php中文网推荐下载!

    利用百度地图开源数据构建省市区三级联动下拉框

    在IT行业中,构建一个省市区三级联动的下拉框是一个常见的需求,特别是在Web开发中,例如用户填写地址信息时。这种功能可以提供便捷的交互体验,让用户快速选择正确的地理位置信息。本篇将介绍如何利用百度地图的...

    jquery插件省市三级联动

    在网页开发中,省市三级联动是一种常见的功能,用于在用户选择省份时自动更新下拉框中的城市选项,进一步选择城市时则更新区/县的选择。这个功能尤其适用于需要收集用户详细地址信息的网站或应用。"jquery插件省市三...

    jQuery全国省市区三级联动插件.rar

    【jQuery全国省市区三级联动插件】是一种基于JavaScript库jQuery实现的前端交互功能,它能够为网站提供动态的、交互式的省市区选择下拉菜单。这个插件的主要目的是简化开发者在构建网页时处理地区选择的复杂性,通过...

    这里是基于layui开发的省市区三级联动下拉框.zip

    本项目是基于layui框架实现的省市区三级联动下拉框,这是一个常见的前端表单元素,常用于地址选择或定位功能。layui是一款轻量级的前端组件库,它提供了丰富的UI组件,易于使用且性能优异,特别适合快速构建中大型...

Global site tag (gtag.js) - Google Analytics