본문 바로가기
jQuery

동적으로 구현된 select 값 DB에 저장된 값으로 불러오기

by sliora 2017. 3. 13.

forEach문을 사용하여 동적으로 radio 버튼을 생성한 경우,  javaScript의 ready Function보다 늦게 생성되기 때문에, 

시점이 맞지 않아 ready Function을 활용하여 DB에 저장되있는 값을 value값에 넣어주지를 못한다.

그러므로, 동적으로 생성 될 input type='radio' 폼 안에, value값을 c:out을 통해 직접 넣어 줄 수 있다.

하지만 이 방법으로 checked 속성을 지정할 경우 반복이 끝난 맨 마지막 속성에 checked가 되므로, 

checked="checked" 를 사용하여, DB에 저장된 값이 오게되면 체크하도록 할 수 있다. 

아래는 실 활용 구문

 

                                <c:choose>
                                    <c:when test="${fn:length(authCodeList) > 0 }">
                                        <c:forEach var="auth" items="${authCodeList}">
                                            <input type="radio" name="authGroup" id="${auth.cdCd}" value="${auth.cdCd}" <c:if test="${auth.cdCd eq memberDetail.authGroup}"> checked="checked"</c:if> "/>${auth.cdNm}&nbsp;&nbsp;&nbsp;
                                        </c:forEach>
                                    </c:when>     
                                </c:choose>

 

jstl과 다르게 ajax를 통해 동적으로 구현된 게시판이라면 ready Function을 통해 select 값을 DB에 저장되어있는 값으로 선택되어 불러올 수 있다.

먼저 ready function 안에 addAttribute로 보내준 값을 jstl로 받고 jQuery 셀렉트를 활용하여, value값을 넣어준다.

        var 변수명 = "${member.name}";
        jq('select[name="구현할 동적폼의 name"]').val(변수명);

이 때 만약 select문이 2depth로 구현되어 onchage가 적용되어 있다면, chage를 받는 function을 한번 더 raedy function안에 넣어준다.

아래는 실제 활용 구문

    jq(document).ready(function(){
        var company = "${memberDetail.company}";
        jq('select[name="dcode"]').val(company);
        changeMcode(company);
    })

     function changeMcode(data) {
            fnSearchMCode(data);
     }

    function fnSearchMCode(data) {

    ajax~~~~~로 동적구현 ~~~~

     }




위 문제 해결의 다른 방법.

ON함수

bind() 함수와 one() 함수가 이미 <body>안에 생성되어 있는 요소에 대한 이벤트 

정의인 반면, on() 함수는 앞으로 동적으로 추가할 요소에 대한 이벤트를 미리 정의

해 놓는 기능이다. 


ON함수의 사용법

새로 추가될 요소에 대한 이벤트이기 때문에, 이 이벤트가 정의 되는 시점에서는 대

상이 존재하지 않게 된다. 그러므로, 이 이벤트는 document 객체에 설정해야 하고, 

다음의 한가지 용법만 있다.

$(document).on( “이벤트”, “셀렉터”, function () {

... 이벤트 처리 로직 ...

} );