j

jQuery Form API - 폼 지원 메서드에 대하여

· 2013-07-14 (일) 19:13:51 · 5380 · 1

폼(form)을 위한 API

이번 시간에는 Form에 대한 이야기를 진행합니다.

웹 프로그램에서 Form은 매우 중요한 요소입니다. 사용자의 데이터를 서버로 전송을 하는 막중한 임무를 뛰고 있습니다. 


ASP.NET에서는 단일 폼의 형태로 구성이 되어 있었으며, 많은 부분이 Form에 대해 크게 신경을 쓰지 않아도 되는 부분이 있었습니다. 하지만 ASP.NET MVC가 나오면서 상황은 바뀌었습니다. 


ASP, PHP 처럼 Form을 직접적으로 컨트롤 하고, 다중 폼을 이용한 프로그래밍이 쉬워졌기 때문입니다. 

물론 ASP.NET도 Form을 통한 데이터 전달이나 이벤트 발생을 하고 있지만 대부분 개발자가 크게 신경을 써야 하는 부분이 적었던 반면에 ASP.NET MVC의 경우는 ASP 처럼 많은 부분에 Form에 대해 신경을 써야 합니다.


ASP.NET이 단일 폼만을 지원하는 것은 아니며, 흔히 말하는 꼼수를 사용하면 다중 폼도 아무런 문제 없이 사용이 가능합니다.


이번 강좌는 ASP.NET 개발자 보다는 ASP, PHP, ASP.NET MVC 개발자에게는 아주 큰 도움이 되지 않을까 하는 생각이 듭니다.


서론은 여기까지 하고, 바로 본론으로 들어가겠습니다.


Form 하면 꼭 등장하는 녀석이 바로 submit() 입니다.

“submit”은 form에 있는 데이터를 사용자가 지정한 곳에 보내는 역할을 하게 됩니다.


jQuery에서 지원하는 .submit() 동일한 역할을 하고 있으며 다음과 같은 형태를 가지고 있습니다.  

form_001.jpg


.submit(handler(eventObject) 를 살펴 보면, 뒤에 handler라는 것이 존재를 하고 있습니다. .submit()을 호출하게 되면 정의된 handler를 실행하고 리턴 받은 Boolean값을 통해 서버로 데이터 전송 유/무를 결정 하게 됩니다.


일반적으로 아래와 같은 방법을 사용을 하고 있습니다.

function sendSubmit() {
    if (document.getElementById("txtName").value == '')
    {
        alert("이름을 입력하세요.");
        return;
    }
    else
    {
        document.form.submit();
    }
}


위 방법을 jQuery에서 제공하는 .submit(handler);를 사용하게 되면 다음과 같습니다.

$('form').submit(function() {
    if($('#txtName').val() == '') {
        alert("이름을 입력하세요.");
        return false;
    }
    else    {
        return true;
    }
});


약간의 형태만 달라졌지, 기본적인 개념은 기존과 동일하기 때문에 큰 어려움 없이 바로 사용 가능 합니다. 


서버간의 데이터 통신을 위해 form에 있는 데이터를 직렬화 하거나 url을 통해 전달을 하는 경우가 있습니다. 

특히나 Ajax를 이용한 비동기 통신에서는 데이터의 직렬화를 상당히 많이 사용하고 있습니다. 이럴 때를 위해서 jQuery에서는 form 데이터를 쉽게 직렬화 시킬 수 있는 메서드를 제공하고 있습니다.


바로 지금부터 설명드릴 아래의 두 녀석입니다.

form_002.jpg

 


메서드 이름부터가 직렬화입니다. 

두 메서드의 역할은 동일하며, 반환되는 값에서 약간의 차이를 보이고 있습니다.

.serialize()의 경우 선택한 폼의 값을 “a=1&b=2&c=3”등의 형태로 반환하며, .serializeArray() 메서드의 경우 jQuery 배열 개체로 반환합니다.


쿼리스트링을 통한 Ajax 관련 데이터를 만들 때는 .serialize()를 사용하시면 됩니다.


다음 예제를 통해 .serialize() 메서드 동작을 확인해 보도록 하겠습니다.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>jQuery</title>
    <link href="../Styles/Site.css" rel="stylesheet" type="text/css" />    
    <style>
        div,pre { background : #FFF; padding:10px; margin:10px; }
        table { border:1px solid #AAA; }
        td { border:1px solid #AAA; width:25px; height:25px; } 
    </style>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('form').submit(function () {
                var datas = $(this).serialize();
                alert(datas);
                return false;
            });
        });
    </script>
</head>
<body style="padding:10px;">    
    <h2>jQuery 시작 Selector</h2>
    <p>jQuery에 대한 자세한 내용을 보려면 jquery.com 을 방문하세요.</p>
    <div>    
        <form>
            <input type="text" name="a" value="1" id="a" /><br />
            <input type="text" name="b" value="2" id="b" /><br />
            <input type="hidden" name="c" value="3" id="c" /><br />          
            <select name="d">
            <option value="5" selected="selected">5</option>
            <option value="6">6</option>
            <option value="7">7</option>
            </select><br />            
            <input type="submit" name="f" value="Submit" id="f" />
        </form>
    </div>
</body>
</html>


form_003.jpg

[폼 데이터에 대한 값이 serialize 된 결과를 확인 할 수 있습니다. ]


이제 더 이상 쿼리스트링을 만들기 위해서 노가다 작업을 하지 않아도 된다는 아주 큰 희소식입니다. 

물론 일반적인 Form 데이터를 전송하게 되면 자동으로 직렬화 형태로 값이 전달이 되지만, Ajax와 같은 특수한 상황에서는 정말로 완소 메소드가 아닌가 싶습니다.

|

댓글 1개

앞으로 더 좋아지겠죠?
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
13-07-14 조회 5,381
13-07-14 조회 5,346
13-07-14 조회 4,621
13-07-14 조회 4,225
13-07-14 조회 4,060
13-07-14 조회 4,145
13-07-14 조회 4,867
13-07-14 조회 4,512
13-07-14 조회 4,290
13-07-14 조회 5,336
13-07-14 조회 5,212
13-07-14 조회 4,995
13-07-14 조회 4,713
13-07-14 조회 5,347
13-07-13 조회 3,556
13-07-01 조회 5,581
13-07-01 조회 5,751
13-07-01 조회 3,824
13-07-01 조회 5,189
13-05-27 조회 3,937
13-05-21 조회 4,839
13-05-02 조회 1만
13-04-29 조회 5,169
13-04-15 조회 5,435
13-04-13 조회 6,290
13-02-27 조회 3,814
13-02-26 조회 6,424
13-02-12 조회 4,991
13-02-01 조회 2.3만
13-01-23 조회 3,324
13-01-09 조회 7,967
13-01-07 조회 4,916
13-01-07 조회 3,599
13-01-04 조회 1.3만
13-01-03 조회 1.2만
12-12-31 조회 6,103
12-12-27 조회 4,414
12-12-27 조회 4,050
12-12-27 조회 8,672
12-12-18 조회 3,575
12-12-12 조회 3,655
12-12-12 조회 6,622
12-12-12 조회 8,107
12-12-05 조회 5,229
12-12-01 조회 6,628
12-11-22 조회 4,573
12-11-09 조회 5,391
12-11-09 조회 7,456
12-10-29 조회 4,731
12-10-16 조회 6,267
12-10-09 조회 5,230
12-09-02 조회 4,425
12-09-01 조회 3,514
12-08-30 조회 4,193
12-08-30 조회 4,169
12-08-28 조회 3,510
12-08-21 조회 7,130
12-08-20 조회 3,656
12-08-18 조회 5,048
12-08-18 조회 3,404
12-08-11 조회 3,552
12-08-09 조회 3,652
12-08-07 조회 3,596
12-08-07 조회 4,187
12-08-01 조회 4,535
12-08-01 조회 4,314
12-07-20 조회 9,815
12-07-17 조회 4,078
12-07-15 조회 3,874
12-07-10 조회 4,192
12-07-09 조회 6,901
12-07-05 조회 3,243
12-07-04 조회 3,407
12-06-30 조회 5,667
12-06-28 조회 3,737
12-06-20 조회 3,867
12-06-16 조회 3,112
12-06-14 조회 3,833
12-06-07 조회 3,809
12-06-06 조회 6,092
12-05-27 조회 4,359
12-05-25 조회 3,175
12-05-25 조회 2,935
12-05-24 조회 3,046
12-05-24 조회 4,504
12-05-23 조회 3,869
12-05-22 조회 6,477
12-05-15 조회 3,818
12-05-15 조회 3,608
12-05-14 조회 3,033
12-05-12 조회 3,504
12-05-11 조회 6,926
12-05-07 조회 4,404
12-04-28 조회 3,606
12-04-25 조회 5,218
12-04-15 조회 3,826
12-04-12 조회 4,665
12-04-11 조회 3,414
12-04-08 조회 3,193
12-03-21 조회 6,345