본문 바로가기
CLASS/HTLML,CSS,JS

#7-1 / checkbox,radio 핸들링

by eungSe__ 2024. 4. 26.
⚡ 전체선택 (checkbox)
- 전체선택 체크박스는 핸들링만을 위한 기능(편의) / 해당 체크박스 데이터는 보내진 않는다
<script>
    function abc(){
        var ck = document.getElementById("all");
        
        // if(ck.checked == true){ //true, false
        //     //반복문을 이용하여 해당 id값을 활용함
        //     var i;
        //     for(i=1; i<=5; i++){
        //         document.getElementById("c"+i).checked = true;
        //     }
        // }else{
        //     var i;
        //     for(i=1; i<=5; i++){
        //         document.getElementById("c"+i).checked = false;
        //     }
        // }

        //조건문 없이 해당 오브젝트 핸들링
        var i;
        for(i=1; i<=5; i++){
            document.getElementById("c"+i).checked = ck.checked;
        }
    }
    
    //각각의 checkbox 선택 이벤트 함수
    function bbb(){
        //호출할때마다 count 0으로 시작하므로 count-- 넣어줄 필요 없음
        //호출할때마다 0에서 현재 체크되어있는 체크박스 수만큼 1씩 증가
        var count=0;
        var b;
        for(b=1; b<=5; b++){
            var box = document.getElementById("c"+b).checked;
            if( box == true ){
                count++;
            }
        }
    
        if(count == 5){
            document.getElementById("all").checked = true
        }else{
            document.getElementById("all").checked = false
        }
    }
</script>

<body>
    <!-- label에 onclick 작성하면 이벤트 2번씩 발생! -->
    <label><input type="checkbox" id="all" onclick="abc()">전체선택</label> <br>
    <input type="checkbox" id="c1" onclick="bbb()">선택1 <br>
    <input type="checkbox" id="c2" onclick="bbb()">선택2 <br>
    <input type="checkbox" id="c3" onclick="bbb()">선택3 <br> 
    <input type="checkbox" id="c4" onclick="bbb()">선택4 <br>
    <input type="checkbox" id="c5" onclick="bbb()">선택5 <br>
</body>
⚡ agree ( radio )

radio태그 특성 : 
name 기준 / id로 컨트롤시 어려움 발생함(radio는 id를 쓰지 않고 핸들링할수 있는 유일한 태그 )
동일한 name일 경우 배열 형태의 기준으로 변경된다.(name이 동일하면 보이진 않지만 배열화가 된다.)

<script>
    //전체동의 이벤트 함수 
    function all_agree(){
        // docment.getElementByName 으로 호출X 버그 발생

        var k = document.getElementById('agree'); //전체동의 호출
        console.log(k.checked)

        //name이 동일하면 - 보이진 않지만 배열화가 된다.
        //name은 document.getElementById('agree' + i); 이방식 못씀ㅋ
        if( k.checked == true ){ //전체동의 체크
            agreeForm.ag1[0].checked = true;
            agreeForm.ag2[0].checked = true;
            agreeForm.ag3[0].checked = true;
        }else{ //전체동의 체크 해제
            agreeForm.ag1[1].checked = true;
            agreeForm.ag2[1].checked = true;
            agreeForm.ag3[1].checked = true;
        }

    }

</script>
<body>
    <!-- radio는 id를 쓰지 않고 핸들링할수 있는 유일한 태그 -->
    <form id="agreeForm">
        <input type="checkbox" id="agree" onclick="all_agree()">전체동의 <br>
        <input type="radio" name="ag1">동의함 <input type="radio" name="ag1" checked onclick="ccc()">동의안함 <br>
        <input type="radio" name="ag2">동의함 <input type="radio" name="ag2" checked onclick="ccc()">동의안함 <br>
        <input type="radio" name="ag3">동의함 <input type="radio" name="ag3" checked onclick="ccc()">동의안함 <br>
    </form>
</body>