자바스크립트 다중 드롭다운 구현 예제
쇼케이스
왼쪽부터 순서대로 큰 분류에서 작은 분류로 내려가는 다중 드롭다운을 구현했다. 상위 드롭다운이 선택되면 하위 드롭다운이 자바스크립트를 통해해 동적으로 업데이트 된다. 이 예제에서 가장 중요한 점은 아주 간단한 방법으로 이중 이상의 가장 일반적인 드롭다운을 만들 수 있다는 것이다.
코드
HTML
<select id="dropdown1" onchange="updateDropdown(1)">
<option value="" selected disabled>계</option>
<option value="동물">동물</option>
<option value="식물">식물</option>
</select>
<select id="dropdown2" onchange="updateDropdown(2)">
<option value="" selected disabled>종</option>
</select>
<select id="dropdown3" onchange="updateDropdown(3)">
<option value="" selected disabled>아종</option>
</select>
<option value="" selected disabled>
: 드롭다운의 첫 번째 옵션으로, 선택할 수 없고 기본적으로 표시되는 옵션이다.selected
속성은 이 옵션이 기본적으로 선택되어 있음을 나타내고,disabled
속성은 사용자가 이 옵션을 선택할 수 없도록 한다.onchange="updateDropdown()
: 옵션이 변경될 때 드롭다운의 깊이를 나타내는 숫자를 인자로 받아updateDropdown
함수를 호출한다.
javascript
<script>
var options = {
// depth: 1 → 2
"동물": ["", "개", "고양이", "말"],
"식물": ["", "토마토", "바나나", "소나무", "잔디"],
// depth: 2 → 3
"개": ["", "시추", "푸들", "골든 리트리버"],
"고양이": ["", "페르시안", "샴", "러시안 블루"],
"말": ["", "아라비안", "앵글로-아라비안"],
"토마토": ["", "체리 토마토", "로마 토마토", "비프스테이크 토마토"],
"바나나": ["", "애플 바나나", "레드 바나나", "블루 자바 바나나"],
"소나무": ["", "적송", "구상나무", "전나무"],
"잔디": ["", "케이프 잔디", "버뮤다 잔디", "조경 잔디"]
};
function updateDropdown(depth) {
var upper = document.getElementById("dropdown" + depth);
var lower = document.getElementById("dropdown" + (depth+1));
var selected = upper.value;
lower.innerHTML = ""; // 기존 옵션 제거
options[selected].forEach(function(item) {
var option = document.createElement("option");
option.text = item;
option.value = item;
lower.add(option);
});
}
</script>
var options
: 각 드롭다운의 옵션을 정의하는 객체이다. 각 키는 상위 드롭다운의 선택지이며, 값은 해당 선택지에 따라 하위 드롭다운에 표시될 옵션들의 배열이다. 모든 항목이 유일하다면 굳이 깊이에 따라 나누지 않아도 된다.function updateDropdown(depth)
: 드롭다운의 깊이를 인자로 받아 해당 깊이의 드롭다운에서 선택된 값을 기반으로 하위 드롭다운을 업데이트한다. 이러한 정의를 통해 깊이마다 새롭게 함수를 정의하지 않고 일반적인 사용이 가능하다.var upper
: 상위 드롭다운을 선택한 요소를 가져온다.var lower
: 하위 드롭다운을 선택한 요소를 가져온다.
여기서 한가지 사용된 트릭은 목록의 가장 앞부분을 빈 문자열 ““로 시작했다는 것이다. 이는 사용자가 아무것도 선택하지 않았을 때를 나타내며, 하위 드롭다운이 비어있도록 한다.