본문 바로가기

웹언어/jQuery

[jQuery강좌] 15강 폼관련 change와 submit이벤트

728x90
반응형

 

 

 

 

 

 

 

 

 

** 이번 강좌에서는 제이쿼리에서 폼요소에 사용되는 이벤트들을 보도록 하겠습니다.

- 대표적으로 change이벤트가 있습니다. 요소에 변화가 있을때라는 뜻입니다.

- submit이벤트는 폼데이터를 전송할 때라는 뜻입니다.

- 이 두가지 이벤트를 보도록 하겠습니다. 

 

 

 

 

 

 

 

 

 

 

1. change이벤트

-  change이벤트는 요소가 변화가 있을때라는 이벤트입니다. 보통 폼요소가 변화가 있을때 사용됩니다.

- 그럼 폼요소가 변화가 있다는 것을 무슨 의미일까요?

- 체크박스가 체크되거나 미체크되었을때, 선택상자의 옵션이 변경되었을때 등을 볼 수 있습니다.

 

 

 

## 문법

//이벤트타입메서드
$('문서객체선택').change(function(){

});

//on메서드 - 이벤트연결메서드
$('문서객체선택').on('change',function(){

});

- 문법은 위와 같이 볼 수 있지만, 보통 이벤트타입 메서드로 더 많이 쓰겠죠?

 

 

 

 

 

 

1) 체크박스 - 모두체크!

- 체크박스를 모두 체크하는 것을 해보도록 하겠습니다.

- 회원가입이나 혹은 모바일인증을 할 때 체크하는 것이 여러 개 있죠?

- 이때 모두 체크를 누르면 나머지 체크들이 모두 체크되게 만들어 보겠습니다.

 

 

## 코드 보기

- 모두 체크를 체크하면 약관01~약관03의 체크박스가 모두 체크되게 처리하고, 그렇지 않으면 모두 미체크처리합니다.

- 약관01~약관03이 변경될때 3개가 모두 체크되었으면 모두 체크를 체크, 그렇지 않으면 미체크처리도 하겠습니다.

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>제이쿼리 - 폼관련이벤트</title>
        <script src="jquery-1.12.4.min.js"></script>
        <script>
            $(document).ready(function(){
                //모두 체크가 변경되었을때
                $('#allChk').change(function(){
                    //현재 모두 체크의 체크여부를 담는 변수
                    var chk = $(this).prop('checked');

                    if(chk){ //체크되었다면
                        $(this).find('~ input').prop('checked',true); //뒤의 모든 체크박스 체크
                    }else{ //체크되지 않았다면
                        $(this).find('~ input').prop('checked',false); //뒤의 모든 체크박스 미체크
                    }
                });

                //약관01~약관03이 변경되었을때
                $('#allChk').find('~ input').change(function(){
                    //각각 체크박스가 체크되었는지 여부를 담는 변수
                    var chk01 = $('#chk01').prop('checked');
                    var chk02 = $('#chk02').prop('checked');
                    var chk03 = $('#chk03').prop('checked');

                    if(chk01 && chk02 && chk03){ //만약 모든 약관이 체크되었다면
                        $('#allChk').prop('checked',true); //모두체크를 체크
                    }else{ //하나라도 체크되지 않았다면
                        $('#allChk').prop('checked',false); //모두체크를 미체크
                    }
                });
            });
        </script>
    </head>
    <body>
        <form action="#">
            <input type="checkbox" id="allChk">
            <label for="allChk">모두 체크</label>
            <hr>
            <input type="checkbox" id="chk01">
            <label for="chk01">약관01</label>
            <br>
            <input type="checkbox" id="chk02">
            <label for="chk02">약관02</label>
            <br>
            <input type="checkbox" id="chk03">
            <label for="chk03">약관03</label>
        </form>
    </body>
</html>

- html에는 체크박스인  <input type="checkbox"> 를 4개를 처리했습니다. 

- 한개는 모두 체크이고, 나머지 3개를 약관01~약관03이라고 보도록 하겠습니다.

prop() 메서드는 문서객체의 속성을 컨트롤 하는 메서드입니다.  'checked' 속성의 경우는 true와 false키워드로 처리가 됩니다.

find() 메서드는 선택된 문서객체로부터 자손, 후손, 동위선택자를 찾는 메서드입니다. 위에서는 뒤에 있는 모든 input태그인 동생요소들을 재선택하는 명령이 되는 겁니다. 

 

 

 

## 결과 보기

- 모두 체크를 체크하면 아래 약관들이 전부 체크되고, 체크해제하면 전부 체크해제가 됩니다.

- 아래 약관도 전체 체크하면 모두 체크가 체크되고, 하나라도 체크해제하면 모두체크도 체크해제됩니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

2) select태그 선택된 옵션 값 찾기

- 이번에는 선택상자에서 선택된 옵션의 값을 반환받아보겠습니다.

- 그 전에 선택자(selector) 중 선택된 옵션만 선택하는 선택자를 보겠습니다.

 

## 문법

$('option:selected')

- 옵션 태그 중 선택된 것만 선택합니다.

 

 

 

## 코드 보기

- 점심메뉴를 옵션태그에 담고 선택한 옵션 값을 반환하는 것을 해보도록 하겠습니다.

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>제이쿼리 - 폼관련이벤트</title>
        <script src="jquery-1.12.4.min.js"></script>
        <script>
            $(document).ready(function(){
                //선택상자의 옵션을 변경하면
                $('#lunch').change(function(){
                    //선택된 옵션의 텍스트컨텐츠를 담는 변수
                    var menu = $(this).find('option:selected').html();

                    //span.menu의 텍스트를 선택된 옵션의 텍스트로 변경
                    $('.menu').html(menu);
                });
            });
        </script>
    </head>
    <body>
        <form action="#">
            <label for="lunch">점심메뉴 선택 : </label>
            <select id="lunch">
                <option>김치찌개</option>
                <option>된장찌개</option>
                <option>순두부찌개</option>
                <option>부대찌개</option>
            </select>
            <hr>
            <p>당신이 선택한 메뉴는 <span class="menu">???</span>입니다.</p>
        </form>
    </body>
</html>

html() 메서드는 문서객체의 텍스트컨텐츠를 컨트롤 합니다. 게터로 값을 얻어올 수도 있고, 세터로 값을 변경할 수도 있습니다.

 

 

 

## 결과보기

- 선택상자를 변경할 때마다 하단 텍스트의 메뉴가 잘 변경되는 것이 확인됩니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. submit이벤트

- submit이벤트는 form태그가 갖고 있는 이벤트입니다. 

- 버튼 클릭을 통해 데이터를 전송하기는 하나, 결과적으로 폼의 모든 데이터를 전송하는 것이라, 이벤트를 받는 대상은 form태그입니다.

 

 

## 문법

//이벤트타입메서드
$('문서객체선택').submit(function(){

});

//on메서드 - 이벤트연결메서드
$('문서객체선택').on('submit',function(){

});

- 위와 같이 두개의 방법을 선택할 수 있지만, 보통 이벤트타입메서드 방식을 선호해서 사용합니다. 

 

 

 

 

## 코드 보기

- 보통 회원가입에서 입력상자에 값을 모두 입력하지도 않았는데, 데이터를 전송하면 안되겠죠? 

- 그럴 때 데이터전송을 막기 위해 많이 사용됩니다.

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>제이쿼리 - 폼관련이벤트</title>
        <script src="jquery-1.12.4.min.js"></script>
        <script>
            $(document).ready(function(){
                //폼의 데이터를 전송할 때
                $('#joinForm').submit(function(e){
                    //form태그가 갖고 있는 submit 기본이벤트 제거 - 데이터 전송 막음
                    e.preventDefault();

                    //각각의 입력상자(input) 값을 담는 변수
                    var boxValue01 = $('#joinName').val();
                    var boxValue02 = $('#joinId').val();
                    var boxValue03 = $('#joinPass').val();

                    //만일 입력상자 값이 하나라도 비어 있다면?
                    if(boxValue01 == '' || boxValue02 == '' || boxValue03 == ''){
                        alert('입력값을 모두 작성하세요.');
                    }else{ //그렇지 않다면
                        document.joinForm.submit(); //폼데이터를 전송해라!
                    }
                });
            });
        </script>
    </head>
    <body>
        <form action="#" id="joinForm" name="joinForm">
            <label for="joinName">이름 :</label>
            <input type="text" id="joinName">
            <br>
            <label for="joinId">아이디 :</label>
            <input type="text" id="joinId">
            <br>
            <label for="joinPass">비밀번호 :</label>
            <input type="password" id="joinPass">
            <hr>
            <button type="submit">회원가입</button>
        </form>
    </body>
</html>

preventDefault() 메서드는 이벤트 객체의 메서드로 기본이벤트를 제거합니다.

- html태그 중 기본이벤트를 가지고 있는 것은  <a> 태그로 페이지이동하는 이벤트를 기본적으로 갖고 있습니다. 

- 또  <form> 태그로 폼데이터를 전송하는 이벤트를 기본적으로 갖고 있습니다.

val() 메서드는 문서객체 중 value값을 갖는 요소의 값을 컨트롤하는 메서드입니다. 

document.joinForm.submit(); 이파트는 자바스크립트 문법으로 썼는데, 그 이유는 제이쿼리의  submit() 는 이벤트 개념만 갖고 있고, 데이터를 전송하라는 명령은 갖고 있지 않기 때문입니다. 제이쿼리는 자바스크립트 플러그인이기 때문에 그냥 자바스크립트를 써도 잘 적용되므로 위와 같이 적으면 됩니다. 

 

 

 

## 결과 보기

- 값을 모두 작성하지 않으면 경고창이 뜨고, 모두 작성하면 데이터를 전송합니다.

- 하지만 action속성값에 연결될 페이지를 작성하지 않아서 주소창에 ?#이 뜨는 것이 확인됩니다.

  데이터를 전달할 액션페이지를 정확히 지정하면 데이터가 전송이 됩니다. 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형