Philo_sophia

Checkbox 다중 선택 및 체크 값 가져오기 본문

[ Programing ]/[ JQuery ]

Checkbox 다중 선택 및 체크 값 가져오기

Sophia_ 2022. 7. 20. 17:00

[ 퀴즈 별 문제의 답이 다중일 경우 처리 ]

 

<c:forEach items="${resultList}" var="resultInfo" varStatus="status">
    <tr>
        <!-- 번호 -->
        <td class="lt_text3">${(searchVO.pageIndex-1) * searchVO.pageUnit + status.count}</td>
        <!-- 항목내용  -->
        <td class="lt_text3L">
            <a href="<c:url value='/adm/qim/QustnrItemManageDetail.do'/>?qustnrIemId=${resultInfo.qustnrIemId}"
               onClick="fn_egov_detail_QustnrItemManage('<c:out value="${resultInfo.qustnrIemId}"/>');return false;"><c:out
                    value='${resultInfo.iemCn}'/></a>
        </td>
        <!-- 정답 여부 -->
        <td>
           <input name="chAnswerCn" id="answerCn<c:out value="${status.count}"/>" title="checkField <c:out value="${status.count}"/>" type="checkbox" 
                value="${resultInfo.iemCn}" <c:if test="${answerList.answerCn.contains(resultInfo.iemCn) eq true }">checked</c:if> 
                onClick="fn_egov_check_answerCn(this,${answerList.mxmmChoiseCo});"/>
         </td>
        <!-- 등록자  -->
        <td class="lt_text3">${resultInfo.frstRegisterNm}</td>
        <!-- 등록일자  -->
        <td class="lt_text3">${fn:substring(resultInfo.frstRegisterPnttm, 0, 10)}</td>
    </tr>
</c:forEach>

문제에 대한 답변들을 forEach문으로 나열한다. → ${resultList}

 

이와 별개로 문제에 정보 리스트에서 정답을 가져와 → ${answerLisrt.answerCn}

나열한 답변과 비교하여 정답일 경우 체크박스를 체크한다.

 

이때 데이터는 다중정답을 ,(콤마)로 구분해 저장되어 있기 때문에 → 1-1,1-2

contains 함수를 사용해 다중 정답들을 모두 체크하게 끔 한다.

→ ${answerList.answerCn.contains(resultInfo.iemCn) eq true }

 

체크박스가 선택되었을 때 해당 체크박스와  문제에 정보 리스트에서 정답갯수를 인자로 넘겨 → ${answerList.mxmmChoiseCo}

fn_egov_check_answerCn() 함수를 실행시킨다.

 

/* ********************************************************
  * 정답 최대 건수 제한 및 정답 변경
  ******************************************************** */
 function fn_egov_check_answerCn(field, count) {
     if($("input:checked[type='checkbox']").length > count) {
         alert("<spring:message code='comUssOlpQim.regist.mxmmChoiseCo' /> ["
                + count
                + "]<spring:message code='comUssOlpQim.regist.exceed' />");
         field.checked = false;
     } 	 

     var answer = null;
     $("input:checked[type='checkbox']").each(function() {
         if(answer == null) {
             answer = $(this).val();
         }else {
             answer += ","
             answer += $(this).val();
         }
     })

     document.listForm.answerCn.value = answer;
 }
comUssOlpQim.regist.mxmmChoiseCo=최대선택건수
comUssOlpQim.regist.exceed=건을 초과하였습니다!

해당 체크박스의 선택 된 수가 문제에 정보 리스트에 정답갯수를 넘으면

alert 메세지를 출력하고 해당 체크박스는 체크를 해제한다.

 

그렇지 않을 경우 빈 함수 answer를 선언하여 each문으로 ,(콤마)와 함께

체크 된 값들은 함수에 넣어준다.

 

최종적으로 이를 hidden으로 숨겨둔 answerCn에 넣고 submit으로

변경 된 정답 값을 저장한다. 

Comments