자주 쓰이는 체크박스 코드를 샘플로 만들었다.
1. "모두 체크"에 체크되면 checkbox_name이 모두 체크된다.
2. 모두 체크된 상태에서 하나 이상 checkbox_name이 체크해제되면 "모두 체크"도 체크 해체된다.
3. Svae 버튼을 눌러 Change event가 일어난 것만 저장한다. (단, "모두 체크"를 눌렀을 시 모든 체크박스를 저장한다.)
<div>
<div>
<p><input type="checkbox" id="allcheck"> <label>모두체크</label></p>
<hr>
<p><input type="checkbox" name="checkbox_name"> <label>Checkbox 1</label></p>
<p><input type="checkbox" name="checkbox_name"> <label>Checkbox 2</label></p>
<p><input type="checkbox" name="checkbox_name"> <label>Checkbox 3</label></p>
<p><input type="checkbox" name="checkbox_name"> <label>Checkbox 4</label></p>
</div>
<div>
<button type="button" name="submit_button" onclick="checkSave()">Save</button>
</div>
</div>
<script type="text/javascript">
// 모든 체크박스 개수
const AllChecked = $("[name=checkbox_name]").length;
let CheckedObj = new Object();
// 초기화면 체크된 개수
let checkedCnt = $('[name=checkbox_name]:checked').length;
// init page - 초기화면 진입시 모두 체크 되어 있으면 #allcheck 체크
if(AllChecked == checkedCnt){
$("#allcheck").prop("checked", true);
}
// 전체 체크박스 체크 후 한개 이상 체크 해제 시 전체 체크박스 체크해제
$("[type=checkbox]").change(function(){
// checked event 발생한 개수
checkedCnt = $('[name=checkbox_name]:checked').length;
// 모든 체크박스 개수 와 같으면 allcheck 체크
if(AllChecked == checkedCnt){
$("#allcheck").prop("checked", true);
}else{
$("#allcheck").prop("checked", false);
}
// change event 발행한 list 변수에 담는다. (#allcheck chaenge event는제외)
if(this.id != 'allcheck'){
CheckedObj[this.value] = $(this).is(':checked');
}
});
// selectAll
function selectAll(this){
const checkboxes = document.getElementsByName('checkbox_name');
// console.log(this.checked);
checkboxes.forEach((_this) => {
// #allcheck의 check값 과 동일하게 변경
_this.checked = this.checked;
CheckedObj[_this.value] = selectAll.checked;
})
}
// 적용 버튼 누를 시 Change event 발생한 리스트만 Update
function checkSave(){
// Object가 비어 있으면 알림 메시지 (변경된 사항 없이 적용버튼 눌렀을 때)
if(Object.keys(CheckedObj).length === 0) {
alert("Warning!");
}else{
$.ajax({
type: 'POST',
url: 'anysite.php?pid='+pid,
data: {"CheckedObj":CheckedObj},
success: function(result){
alert("Saved!");
},
error : function(result, status, error) {
alert("Error!");
}
});
}
}
</script>
'안돼니? 야 나두' 카테고리의 다른 글
물결표시가(~) 대시(-)로 보이는 현상 (tilde '~' sign rendered as dash '-' in View page) (0) | 2022.01.06 |
---|---|
php 백그라운드, Thread, 실행타임, 세션타임 (0) | 2019.09.20 |
svn 'attempt to write a readonly database'오류 (0) | 2016.12.05 |
HTML을 안드로이드 웹뷰에 모두 보이게 하기 Using WebView ViewPort in android (0) | 2016.10.25 |
mssql DBCP 설정 (0) | 2016.10.17 |