프론트엔드/Javascript · JQuery

[자바스크립트, 제이쿼리] 지역선택 셀렉트박스 동적변화 구현하기 (Chained Select Menu)

경호! 2021. 6. 17. 12:49

1. 마크업

<select onchange="fnChangeCity(this);" name="City" id="City">
	<option value="">대분류 (시,도)</option>
</select>
<select name="County" id="County">
	<option value="">중분류 (구,군)</option>
</select>

 

 

2. 스크립트

<script>

        //지역 셀렉트(전역변수), 박경호, 2021-06-16
        var CityArray = ["서울특별시","인천광역시","대전광역시","광주광역시","대구광역시","울산광역시","부산광역시","경기도","강원도","충청북도","충청남도","전라북도","전라남도","경상북도","경상남도","제주도"];
        var CountArray = [
             ["강남구","강동구","강북구","강서구","관악구","광진구","구로구","금천구","노원구","도봉구","동대문구","동작구","마포구","서대문구","서초구","성동구","성북구","송파구","양천구","영등포구","용산구","은평구","종로구","중구","중랑구"]
            ,["계양구","남구","남동구","동구","부평구","서구","연수구","중구","강화군","옹진군"]
            ,["대덕구","동구","서구","유성구","중구"]
            ,["광산구","남구","동구", "북구","서구"]
            ,["남구","달서구","동구","북구","서구","수성구","중구","달성군"]
            ,["남구","동구","북구","중구","울주군"]
            ,["강서구","금정구","남구","동구","동래구","부산진구","북구","사상구","사하구","서구","수영구","연제구","영도구","중구","해운대구","기장군"]
            ,["고양시","과천시","광명시","광주시","구리시","군포시","김포시","남양주시","동두천시","부천시","성남시","수원시","시흥시","안산시","안성시","안양시","양주시","오산시","용인시","의왕시","의정부시","이천시","파주시","평택시","포천시","하남시","화성시","가평군","양평군","여주군","연천군"]
            ,["강릉시","동해시","삼척시","속초시","원주시","춘천시","태백시","고성군","양구군","양양군","영월군","인제군","정선군","철원군","평창군","홍천군","화천군","횡성군"]
            ,["제천시","청주시","충주시","괴산군","단양군","보은군","영동군","옥천군","음성군","증평군","진천군","청원군"]
            ,["계룡시","공주시","논산시","보령시","서산시","아산시","천안시","금산군","당진군","부여군","서천군","연기군","예산군","청양군","태안군","홍성군"]
            ,["군산시","김제시","남원시","익산시","전주시","정읍시","고창군","무주군","부안군","순창군","완주군","임실군","장수군","진안군"]
            ,["광양시","나주시","목포시","순천시","여수시","강진군","고흥군","곡성군","구례군","담양군","무안군","보성군","신안군","영광군","영암군","완도군","장성군","장흥군","진도군","함평군","해남군","화순군"]
            ,["경산시","경주시","구미시","김천시","문경시","상주시","안동시","영주시","영천시","포항시","고령군","군위군","봉화군","성주군","영덕군","영양군","예천군","울릉군","울진군","의성군","청도군","청송군","칠곡군"]
            ,["거제시","김해시","마산시","밀양시","사천시","양산시","진주시","진해시","창원시","통영시","거창군","고성군","남해군","산청군","의령군","창녕군","하동군","함안군","함양군","합천군"]
            ,["서귀포시","제주시","남제주군","북제주군"]
        ];
        
        
        
        $(document).ready(function() {

            fnCityOptionInit();

        }); //document.ready
        
        
        
        //지역 셀렉트(삽입), 박경호, 2021-06-16
        function fnCityOptionInit() {

            let tags = '';
            for (i = 0 ; i < CityArray.length ; i++) {
                tags += `<option value="${CityArray[i]}">${CityArray[i]}</option>`;
            };
            $('#City').append(tags);
            
        };
        
        //지역 셀렉트(교체), 박경호, 2021-06-16
        function fnChangeCity(selectbox) {

            let CountyOption = '';
            let countyNum = CityArray.indexOf($(selectbox).val());

            if ( countyNum !== -1 ) {

                for ( i = 0 ; i < CountArray[countyNum].length ; i++ ) {
                    CountyOption += `<option value="${CountArray[countyNum][i]}">${CountArray[countyNum][i]}</option>`;
                };

            } else {

                CountyOption = '<option value="">중분류 (구,군)</option>';

            };

            $('#County').html(CountyOption);

        };

</script>

 

3. 잡담

지역변수 CityArray, CountArray의 항목들은 정확하지 않을 수 있습니다.