티스토리 뷰
반응형
공정을 체크하는 체크박스를 클릭하면 일어나는 일들을 작업하고 있다.
여러가지 조건들.. 그것들을 만족하는 코드....
1) 코드에서 button을 checkbox를 toggle하도록 코드 수정
$(document).ready(function() {
var values = [];
$('.form-check-input').each(function() {
var val = $(this).val();
if (val && val !== '전체적용' && val !== '' && val !== 'on') {
val = val.replace(/_.*/, '');
if (values.indexOf(val) === -1) {
values.push(val);
}
}
});
if (values.length > 0) {
for (var i = 0; i < values.length; i++) {
var text = values[i] + ' check 전체';
var newButton = $('<button>').addClass('btn btn-outline-success mr-2 mb-2').text(text);
$('.button-container').append(newButton);
newButton.on('click', function(event) {
event.preventDefault();
var value = $(this).text().split(' ')[0];
$('.form-check-input').each(function() {
if ($(this).val().startsWith(value)) {
$(this).prop('checked', function(index, checked) {
return !checked;
});
}
});
const checkboxes = document.querySelectorAll('input[name="checkbox[]"]');
const checkedValues = Array.from(checkboxes).filter(c => c.checked).map(c => c.value);
console.log(checkedValues); // 선택된 체크박스 값 출력
$("#workboard_arrCheck").val(checkedValues);
});
}
}
});
2) 위의 코드에서 'check 전체' 버튼이 들어있는 버튼을 클릭하면 해당 values는 전체 체크가 되고, 한번 더 누르면 해당 values가 전체 체크 해제가 되도록 코드 수정
$(document).ready(function() {
var values = [];
$('.form-check-input').each(function() {
var val = $(this).val();
if (val && val !== '전체적용' && val !== '' && val !== 'on') {
val = val.replace(/_.*/, '');
if (values.indexOf(val) === -1) {
values.push(val);
}
}
});
if (values.length > 0) {
for (var i = 0; i < values.length; i++) {
var text = values[i] + ' check 전체';
var newButton = $('<button>').addClass('btn btn-outline-success mr-2 mb-2').text(text);
$('.button-container').append(newButton);
newButton.on('click', function(event) {
event.preventDefault();
var value = $(this).text().split(' ')[0];
$('.form-check-input').each(function() {
if ($(this).val().startsWith(value)) {
$(this).prop('checked', function(index, checked) {
return !checked;
});
}
});
const checkboxes = document.querySelectorAll('input[name="checkbox[]"]');
const checkedValues = Array.from(checkboxes).filter(c => c.checked).map(c => c.value);
console.log(checkedValues); // 선택된 체크박스 값 출력
$("#workboard_arrCheck").val(checkedValues);
// 해당 value에 속하는 checkbox들이 모두 체크되어 있는지 확인하여 'check 전체' 버튼의 텍스트 변경
var allChecked = true;
$('.form-check-input').each(function() {
if ($(this).val().startsWith(value) && !$(this).prop('checked')) {
allChecked = false;
}
});
if (allChecked) {
$(this).text(value + ' check 전체 해제');
} else {
$(this).text(value + ' check 전체');
}
});
}
}
});
변경된 부분은 다음과 같습니다.
- 24~44번째 줄에서 'check 전체' 버튼을 클릭할 때마다 해당 value에 속하는 checkbox들이 전체 체크 혹은 전체 체크 해제되도록 수정하였습니다. 이전에는 'check 전체' 버튼을 누를 때마다 모든 checkbox가 체크되었는데, 이번에는 해당 value에 속하는 checkbox들만 체크되도록 변경하였습니다.
- 47~56번째 줄에서 'check 전체' 버튼의 텍스트를 변경하는 부분이 추가되었습니다. 해당 value에 속하는 checkbox들이 모두 체크되어 있는지 확인하여 'check 전체' 버튼의 텍스트를 'check 전체 해제'로 변경하거나, 그렇지 않으면 'check 전체'로 변경합니다.
이것이 최종버튼을 클릭하면 토글되고, 반영되는 것을 구현한 코드이다.
$(document).ready(function() {
var values = [];
$('.form-check-input').each(function() {
var val = $(this).val();
if (val && val !== '전체적용' && val !== '' && val !== 'on') {
val = val.replace(/_.*/, '');
if (values.indexOf(val) === -1) {
values.push(val);
}
}
});
if (values.length > 0) {
// '초기화' 버튼 추가
var resetButton = $('<button>').addClass('btn btn-outline-danger mr-2 mb-2').text('초기화');
$('.button-container').append(resetButton);
resetButton.on('click', function(event) {
event.preventDefault();
$('.form-check-input').prop('checked', false);
const checkboxes = document.querySelectorAll('input[name="checkbox[]"]');
const checkboxArray = Array.from(checkboxes);
checkboxArray.forEach((checkbox) => {
const checkedValues = checkboxArray.filter(c => c.checked).map(c => c.value);
$("#workboard_arrCheck").val(checkedValues);
});
});
for (var i = 0; i < values.length; i++) {
var text = values[i] + ' check 전체';
var newButton = $('<button>').addClass('btn btn-outline-success mr-2 mb-2').text(text);
$('.button-container').append(newButton);
newButton.on('click', function(event) {
event.preventDefault();
var value = $(this).text().split(' ')[0];
$('.form-check-input').each(function() {
if ($(this).val().startsWith(value)) {
$(this).prop('checked', !$(this).prop('checked'));
}
});
const checkboxes = document.querySelectorAll('input[name="checkbox[]"]');
const checkboxArray = Array.from(checkboxes);
checkboxArray.forEach((checkbox) => {
const checkedValues = checkboxArray.filter(c => c.checked).map(c => c.value);
$("#workboard_arrCheck").val(checkedValues);
});
});
}
}
});
위의 코드에서는 "초기화" 버튼을 추가하고, 해당 버튼 클릭 시 모든 체크박스를 unchecked 상태로 변경합니다. 또한, 체크박스를 클릭했을 때도 변경된 체크박스 상태를 checkedValues 변수에 저장하여 $("#workboard_arrCheck").val()를 이용해 값이 업데이트되도록 하였습니다.
반응형
'IT tech Coding > javascript' 카테고리의 다른 글
data.push(...sectionData); 자바스크립트 ... 이게 뭐지? (0) | 2023.05.08 |
---|---|
[자바스크립트] 한글 입력 감지 (초성, 중성, 종성 포함) - 화면 출력 코드 (4) | 2023.04.30 |
자바스크립트 오류 : 'Uncaught TypeError: Cannot read properties of undefined' (0) | 2023.04.20 |
트럼프 레이져 기계에서 나오는 pdf를 파싱해서 이미지를 추출할 수 있을까? (도전기 기록) (0) | 2023.04.13 |
[자바스트립트] 특정문구와 붙어있는 텍스트만 추출하고 싶을때 (0) | 2023.04.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- json파일편하게보는법
- 테크에능한여성
- 엑셀셀보호
- 파이썬코드줄바꿈방법
- chatGPT3.5파이썬버전
- json파일형태보기
- ajax오류메시지
- General error: 2031
- 도면자동생성
- 티스토리챌린지
- 프로그래머생활
- #파이썬패키징
- 구글드라이브API
- #InstallForge
- 오블완
- #프로그램설치
- 엑셀보호
- 엑셀입력보호
- isset을 적용해야 하는 이유
- 1. #웹개발 2. #로트번호 3. #성적서보기 4. #ajax 5. #jquery 6. #php 7. #프론트엔드 8. #백엔드 9. #부트스트랩 10. #웹기능구현
- 코딩효율성
- 뫄프로그래밍
- Bootstrap 5
- 효율적코딩방법
- 스크립트작성기초
- sql문장 날짜계산
- 코딩튜토리얼
- 캐드자동작도
- 오토핫키가이드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함