카테고리 셀렉트박스를 동적으로 생성하고 삭제하기
카테고리 선택 등록을 위해 셀렉트박스를 이용하는 경우, 셀렉트박스를 매번 만들어 주고 삭제해야 하는 경우가 있다.
이때 셀렉트박스를 동적으로 처리하도록 하는 스크립트이다.
하위 레벨에 내용이 존재하면 계속해서 추가로 셀렉트박스를 생성한다.
하위 카테고리를 모두 펼친 상태에서 다시 상위를 선택하면 하위 카테고리를 자동으로 삭제한다.
데이터는 ajax를 통하여 json 형식으로 받아오면 된다. 해당 부분은 구현하지 않았다.
스크립트의 작동 모습이 궁금하면, 미리 보기를 통해 확인 가능하다.
Javascript
function selectCategory(obj) {
var ag_idx = obj.value
var ag_depth = obj.getAttribute('depth')
var felm = getObjectFormAuthGroup()
for (var i = 0; i < felm.ag_parent.length; i++) {
if (ag_depth < felm.ag_parent[i].getAttribute('depth')) {
felm.ag_parent[i].remove()
} else {
if (ag_idx) felm.ag_parent[i].disabled = true
}
}
if (ag_idx) {
ag_depth++
getAuthGroupChildren(ag_idx, ag_depth)
}
}
function getAuthGroupChildren(ag_idx, ag_depth) {
//ajax를 통하여 json 형태의 데이터를 가져오는 부분을 만들어 추가 합니다.
var response = {
1: {
5: 'Category1-1',
6: 'Category1-2',
},
2: {
7: 'Category2-1',
8: 'Category2-2',
9: 'Category2-3',
},
3: {
10: 'Category3-1',
11: 'Category3-2',
},
4: {
12: 'Category4-1',
},
5: {
13: 'Category1-1-1',
14: 'Category1-1-2',
},
6: {
15: 'Category1-2-1',
16: 'Category1-2-2',
},
13: {
17: 'Category1-1-1-1',
18: 'Category1-1-1-2',
},
}
var felm = getObjectFormAuthGroup()
for (var i = 0; i < felm.ag_parent.length; i++) {
felm.ag_parent[i].disabled = false
}
console.log(response[ag_idx])
if (typeof response[ag_idx] == 'undefined') return
var selectbox = document.createElement('select')
selectbox.name = 'ag_parent[]'
selectbox.setAttribute('depth', ag_depth)
selectbox.onchange = function () {
selectCategory(this)
}
selectbox.options.length = 0
selectbox.options[0] = new Option('Category', '')
var lists = response[ag_idx]
for (var key in lists) {
var val = lists[key]
selectbox.options[selectbox.options.length] = new Option(val, key)
}
var div_category = document.getElementById('div_category')
div_category.appendChild(selectbox)
}
function getObjectFormAuthGroup() {
var f = document.frmCategoryTest
var obj = {}
for (var i = 0; i < f.elements.length; i++) {
var type = f.elements[i].type
var elName = f.elements[i].name
if (/(text|textarea|select|hidden)/.test(type)) {
if (/(\[|\])/g.test(elName)) {
elName = elName.replace(/(\[|\])/g, '')
if (typeof obj[elName] == 'undefined') {
obj[elName] = []
}
obj[elName].push(f.elements[i])
} else {
obj[elName] = f.elements[i]
}
}
}
return obj
}
HTML
<form name="frmCategoryTest">
<div id="div_category">
<select name="ag_parent[]" depth="0" onchange="selectCategory(this);">
<option value="">Category</option>
<option value="1">Category1</option>
<option value="2">Category2</option>
<option value="3">Category3</option>
<option value="4">Category4</option>
</select>
</div>
</form> 이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스 에 따라 이용할 수 있습니다.
Comments
Related Posts
자바스크립트로 주간(일~토) 셀렉트 박스 만들기
년도와 월을 선택하면 해당 년/월에 포함 되어있는 주 시작일과 종료일을 셀렉트박스로 만들게 하는 함수 입니다. 아래 이미지와 같은 모습이며, 예제 보기를 통해서 구현된 페이지를…
jquery를 이용한 슬라이드(slides)배너
jquery에서 사용할 수 있는 slidesjs라는 좋은 툴이 있지만, 퍼블리셔가 작업해서준 HTML 구조와 CSS 변경 작업이 어려워서 직접 만들었습니다. slidesjs 보…
javascript comma and uncomma
자바스크립트에서 숫자를 표기할때 3자리마다 콤마를 찍어줘야 할 때가 있다 자주 사용하는 기능인데 매번 만들기란 여간 귀찮은게 아니다. 콤마찍기 콤마 풀기 input box에서 사용…