三級聯動,json數據、可設置默認城市


閑來無事,折騰個三級聯動,json數據、可設置默認城市、可配置是否顯示第三級select

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>省市縣三級聯動</title>
    <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
    <script type="text/javascript">
    var cityjson = '{'
            +   '"province" : ['
            +      '{"id" : "1", "name" : "北京市"},'
            +      '{"id" : "2", "name" : "山西省"},'
            +      '{"id" : "3", "name" : "河北省"}'
            +   '],'
            +   '"city" : ['
            +      '{"cid" : "1", "id" : "1", "name":"海淀區"},'
            +      '{"cid" : "1", "id" : "2", "name":"西城區"},'
            +      '{"cid" : "1", "id" : "2", "name":"東城區"},'
            +      '{"cid" : "1", "id" : "3", "name":"朝陽區"},'
            +      '{"cid" : "2", "id" : "4", "name":"太原市"},'
            +      '{"cid" : "2", "id" : "5", "name":"大同市"},'
            +      '{"cid" : "2", "id" : "6", "name":"陽泉市"},'
            +      '{"cid" : "3", "id" : "7", "name":"石家庄"},'
            +      '{"cid" : "3", "id" : "8", "name":"蚌埠市"},'
            +      '{"cid" : "3", "id" : "9", "name":"張家口"}'
            +   '],'
            +   '"county" : ['
            +      '{"cid" : "1", "id" : "1", "name":"中關村"},'
            +      '{"cid" : "1", "id" : "2", "name":"五道口"},'
            +      '{"cid" : "2", "id" : "3", "name":"西直門"},'
            +      '{"cid" : "2", "id" : "4", "name":"新街口"},'
            +      '{"cid" : "2", "id" : "5", "name":"小西天"},'
            +      '{"cid" : "3", "id" : "6", "name":"東直門"},'
            +      '{"cid" : "3", "id" : "7", "name":"雍和宮"},'
            +      '{"cid" : "3", "id" : "8", "name":"北新橋"},'
            +      '{"cid" : "5", "id" : "9", "name":"城區"},'
            +      '{"cid" : "5", "id" : "10", "name":"南郊區"},'
            +      '{"cid" : "5", "id" : "11", "name":"開發區"}'
            +   ']'
            +'}';
    ;(function($, window, document, undefined){
        $.fn.showCity = function(opt){
            this.defaults = {
                'cityjson'          : cityjson,     //json字符串變量名
                'defaultShow'       : false,        //市、縣是否顯示,默認不顯示
                'showCounty'        : true,         //是否顯示縣
                'defaultCity'       : [0,0,0]       //默認城市,對應id
            };
            this.options = $.extend({}, this.defaults, opt);

            var oCityJson = eval('('+this.options.cityjson+')'),
                oProvince = $('.province',this),
                oCity = $('.city',this),
                oCounty = $('.county',this),
                provinces = oCityJson.province,
                citys = oCityJson.city,
                countys = oCityJson.county;

            //創建省
            this.creatProvince = function(){
                var html = '';
                for(var i=0; i<provinces.length; i++){
                    html += '<option value='+provinces[i].id+'>'+provinces[i].name+'</option>';
                }
                oProvince.append(html);
            };

            this.creat = function(){
                oProvince.html('<option value="0">選擇省</option>');
                this.creatProvince();
                if(this.options.defaultShow){
                    oCity.show();
                    oCounty.show();
                    oCity.html('<option value="0">選擇市</option>');
                    oCounty.html('<option value="0">選擇縣</option>');
                };
                this.defaultCity();
                this.checkProvince();
                if(this.options.showCounty){
                    this.checkCounty();
                }
            };

            //默認城市
            this.defaultCity = function(){
                if(this.options.defaultCity.toString() == '0,0,0'){
                    return;
                };

                var optionsCity = '';
                for(var i=0; i<provinces.length; i++){
                    if(provinces[i].id == this.options.defaultCity[0]){
                        oProvince.val(provinces[i].id);
                        for(var j=0; j<citys.length; j++){
                            if(citys[j].cid == provinces[i].id){
                                optionsCity += '<option value='+citys[j].id+'>'+citys[j].name+'</option>'
                            }
                        }
                        oCity.append(optionsCity).show();
                    }
                };

                var optionscounty = '';
                for(var i=0; i<citys.length; i++){
                    if(citys[i].id == this.options.defaultCity[1] && citys[i].cid == oProvince.val()){
                        oCity.val(citys[i].id);
                        if(this.options.showCounty){
                            for(var j=0; j<countys.length; j++){
                                if(countys[j].cid == citys[i].id){
                                    optionscounty += '<option value='+countys[j].id+'>'+countys[j].name+'</option>';
                                }
                            }
                            oCounty.append(optionscounty).show();
                        }
                    }
                };

                if(this.options.showCounty){
                    for(var i=0; i<countys.length; i++){
                        if(countys[i].id == this.options.defaultCity[2] && countys[i].cid == oCity.val()){
                            oCounty.val(countys[i].id);
                        }
                    };
                }
            }


            this.checkProvince = function(){
                oProvince.bind('change',function(){
                    var html = '<option value="0">選擇市</option>';
                    var val = $(this).val();
                    for(var i=0; i<citys.length; i++){
                        if(citys[i].cid == val){
                            html += '<option value='+citys[i].id+'>'+citys[i].name+'</option>'
                        }
                    }
                    oCity.html(html).show();
                    oCounty.html('<option value="0">選擇縣</option>');
                })
            };

            this.checkCounty = function(){
                oCity.bind('change',function(){
                    var html = '<option value="0">選擇縣</option>';
                    var val = $(this).val();
                    for(var i=0; i<countys.length; i++){
                        if(countys[i].cid == val){
                            html += '<option value='+countys[i].id+'>'+countys[i].name+'</option>'
                        }
                    }
                    oCounty.html(html).show();
                })
            };
            
            return this.creat();
        }
    }(jQuery, window, document))

    $(function(){
        $('#selectItem').showCity({
            "defaultCity" : [2,5,10]
        });
    })
    </script>
</head>
<body>
<div class="selectItem" id="selectItem">
    <select class="province"></select>
    <select class="city" style="display:none"></select>
    <select class="county" style="display:none"></select>
</div>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM