Full Stack Web Developer.
Syaku (샤쿠)

Java, JS (ES6+), Spring, Spring security, jQuery, Reactjs, Bootstrap.

        

07-12 09:23


Spring Boot 2 보기 Front-end 보기 DevOps 보기 Spring 3 보기 Spring Security 3 보기

jQuery Action (ajax 전송 컨트롤러, 유효성검사, 데이타 변경, 인터셉터 이벤트)

written by Seok Kyun. Choi. 최석균


jQuery Action (ajax 전송 컨트롤러, 자료검사, 자료변경, 인터셉터 이벤트)


※ 언어 : JavaScript

※ 필수 라이브러리 : jQuery 1.3.2 이상

※ License : GNU Lesser General Public License


# 현재 버전 (Github)

※ 프로젝트 사이트 : https://github.com/syakuis/jquery-action

※ 데모 : http://syakuis.github.io/demo/jquery-action/demo/index.html


# 2.0.7 이하 버전 (구글 프로젝트)

※ Project Home : http://code.google.com/p/jquery-action

※ SVN : http://jquery-action.googlecode.com/svn/trunk/action

※ Download : http://code.google.com/p/jquery-action/downloads/list


jQuery Action (액션) 은 주기적으로 자주 사용되는 자바스크립트 함수들을 모아 쉽게 재사용할 수 있는 라이브러리화한 자바스크립트 프로그램입니다.

자바스크립트에서 ajax 혹은 submit 이벤트가 실행되었을때 해야할 일련의 작업들을 다양한 시나리오 구성으로 손쉽게 구현할 수 있게 도와주는 전송 컨트롤러 프레임워크입니다. 


액션은 jQuery 에 의존하므로 jQuery 1.3.2 이상 라이브러리가 필요하며, 이하버전에서도 가능하나 보장할 수 없습니다.


# 개발자 : 최석균. Seok Kyun. Choi. (Syaku)

# 개발자 블로그 : http://syaku.tistory.com

# jQuery Action Post : http://syaku.tistory.com/164


* jaAction 은 다음과 같은 기능을 제공합니다.


1) 데이터 필터링

데이터 입력 값 존재 체크 : 값을 입력 , 선택 , 체크 하였는 가를 체크함.

데이터 입력 값의 형태 체크 : 값이 숫자 , 영문 , 한글 , 한영조합 등등 인가를 체크함.

데이터 입력 값의 길이 체크 : 입력한 글자 수를 체크함.

데이터 입력 값의 비교 : 두개의 입력 값이 같은지 체크함.

데이터 선택 수 체크 : 라디오 및 체크 박스의 선택 수를 체크함.


데이터 정규표현식 체크 : 정규표현식을 이용하여 데이터 값 체크. 주로 이메일, 주민등록번호, 홈페이지 등등 정규표현식을 이용하여 입력한 값이 패턴과 일치한지를 체크함. 정규표현식을 계속적으로 추가할 수 있음.


2) 상황에 맞는 메세지 출력

데이터 필터링에서 부적합할 경우 그에 따를 메세지를 출력함.

모든 작업이 완료되었을 때 전송여부를 확인하기 위한 메세지를 출력함.


3) 메세지 국제화

액션은 메세지가 분리되어 있어 국제화 할 수 있습니다.


4) 자료변경

액션은 임의적으로 데이터를 수정할 수 있습니다.

한개의 폼 태그에서 여러 개의 액션을 구성하려고 할때 폼 속성을 수정해야 합니다.

예를들어 목록 게시판에 자료를 지우려는 함수, 자료를 수정하려는 함수가 있을 경우 각 폼 속성의 액션 경로가 다를 수 있습니다.

이럴때 액션을 이용하여 폼 속성을 수정할 수 있으며 또한 내부의 객체(input , select 등등)의 값들을 수정하거나 객체를 임의적으로 생성하여 값을 부여할 수 있습니다.


5) 롤백

액션이 진행되는 과정에서 취소가 되었을 때 변경된 자료를 모두 원래대로 되돌려 놓습니다.

예를들어 목록 게시판에 자료를 지우려는 함수를 실행하였고 취소했다고 가정하였을때… 폼 속성의 액션 경로는 지우는 페이지 경로일 것입니다.

이때 목록 게시판에서 검색 이벤트가 실행될 경우 데이터가 손실될 수있습니다. 그뿐 아니라 인터페이스가 불확실하게 되어 사용자에게 혼동을 줄 수 있습니다. 롤백 기능은 이런 것들을 방지할 수 있습니다.


6) 결과를 이용한 상황 처리

액션을 이용하여 서버로 전송 후 결과를 받은 값을 이용하여 다양한 상황을 구현할 수 있습니다.

메세지를 출력하거나, 특정 페이지로 이동하거나, 특정 함수를 호출할 수 있습니다.


7) 인터셉터

액션을 실행하고 일련의 작업을 진행하기 전 후 상황에 맞는 시나리오를 구성할 수 있게 임의적인 함수를 호출할 수 있습니다.

액션이 실행되기 전에 일부 값을 수정하거나, 실행 후 페이지를 새로고침하거나 페이지를 이동시킬 수 있는 함수를 만들어 실행 시킬수있습니다.



posted syaku blog



<html>
<head>
<meta content="jQuery Action" name="Generator" />
<meta content="Seok Kyun. Choi. (http://syaku.tistory.com)" name="Programmed" />
<script type="text/javascript" language="javascript" charset="UTF-8" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
<script type="text/javascript" language="javascript" charset="UTF-8" src="../jquery.action.js"></script>
<script type="text/javascript" language="javascript" charset="UTF-8" src="../jquery.action-ko.js"></script>
<link rel="stylesheet" type="text/css" charset="UTF-8" href="../jquery.action.css" />
</head>

<body>

<script type="text/javascript">

function onSubmit() {
  jQuery('#form_input').jaAction({ 
      values : 'mod=update' // mod 인풋박스의 값을 update 변경함.
    , formAttr : 'action=./save.html' // form 속성의 action 을 ./save.html 변경함.
    , send : 'submit' // form 을 submit 으로 전송함.
    , filter : [
        // #user_id 의 값이 없거나, user_id 형식의 값이 아니고 입력길이가 2자이상 4자이하가 아닌경우 아이디 .... 메세지 alert 창을 출력함.
        { target : "#user_id", params : "&filter=notnull&filter=user_id&length=2,4&title=아이디" }
        // #name 최대길이 10자이상을 넘을 경우 성명 .... 메세지 alert 창을 출력합니다.
      , { target : "#name", params : "&filter=notnull&max_length=10&title=성명" }
      , { target : "#pwd", params : "&filter=notnull&max_length=40&title=비밀번호" }
        // #pwd2 가 #pwd 의 값과 다를 경우 비밀번호 확인 .... 메세지 alert 창을 출력합니다.
      , { target : "#pwd2", params : "&filter=notnull&max_length=40&#pwd=!#pwd2&title=비밀번호 확인" }
      , { target : "#email", params : "&filter=email&title=메일" }
      // #age 의 값이 숫자가 아니거나, 50이상으로 입력한 경우 나이 ... 메세지 alert 창을 출력합니다.
      , { target : "#age", params : "&filter=notnull&filter=number&num=50&title=나이" }
      , { target : "#job", params : "&filter=notnull&title=직업" }
      // input:radio[name=sex] 의 라디오박스 선택수가 0개인 경우 성별 ... 메세지 alert 창을 출력합니다.
      , { target : "input:radio[name=sex]", params : "&selected=1&title=성별" }
      // input:radio[name=s] 의 체크박스 선택수가 2개이상 3개이하가 아닌 경우 취미 ... 메세지 alert 창을 출력합니다.
      , { target : "input:checkbox[name=s]", params : "&selected=2,3&title=취미" }

    ]
    , ask : 'update' // confirm 메세지 출력
    , beforeAction : function() { // jaAction 메서드가 실행되기 전에 beforeAction 함수를 실행함. return false; 인 경우 jaAction 종료함.
      var ja = $.jaFilter._filtering(jQuery('input:radio:[name=is]'),'&selected=1&value=1');
      if (ja.error) { alert("동의를 선택하세요."); return false;} 
    }

  });
}

</script>

<form id="form_input" method="post" action="">
hidden box : <input type="text" id="mod" name="mod" value="insert" />

<table border="1">
  <tr>
    <td colspan="2"><input type="button" value="저장" onclick="onSubmit();" /></td>
  </tr>
  <tr>
    <th>아이디</th>
    <td><input type="text" id="user_id" name="user_id" /></td>
  </tr>
  <tr>
    <th>이름</th>
    <td><input type="text" id="name" name="name" /></td>
  </tr>
  <tr>
    <th>비밀번호</th>
    <td><input type="text" id="pwd" name="pwd" /></td>
  </tr>
  <tr>
    <th>비밀번호 확인</th>
    <td><input type="text" id="pwd2" name="pwd2" /></td>
  </tr>
  <tr>
    <th>메일주소</th>
    <td><input type="text" id="email" name="email" /></td>
  </tr>
  <tr>
    <th>나이</th>
    <td><input type="text" id="age" name="age" /></td>
  </tr>
  <tr>
    <th>직업</th>
    <td>
      <select name="job" id="job">
        <option value="">선택</option>
        <option value="학생">학생</option>
        <option value="회사원">회사원</option>
        <option value="공무원">공무원</option>
      </select>

    </td>
  </tr>
  <tr>
    <th>성별</th>
    <td>
      <input type="radio" id="sex_boy" name="sex" /> 남
      <input type="radio" id="sex_girl" name="sex" /> 여
    </td>
  </tr>
  <tr>
    <th>취미</th>
    <td>
      <input type="button" value="모두선택" onclick="jQuery.ja.checked('#form_input input:checkbox[name=s]');" />
      <input type="checkbox" id="s1" name="s" /> 여행
      <input type="checkbox" id="s2" name="s" /> 공부
      <input type="checkbox" id="s3" name="s" /> 컴퓨터
      <input type="checkbox" id="s4" name="s" /> 연애
      <input type="checkbox" id="s5" name="s" /> 독서
      <input type="checkbox" id="s6" name="s" /> 게임
    </td>
  </tr>
  <tr>
    <th>동의</th>
    <td>
      <input type="radio" id="is1" name="is" value="1" /> 동의
      <input type="radio" id="is_ss" name="is" value="2" /> 동의안함
      <input type="radio" id="is3" name="is" value="3" /> 모르겠음
    </td>
  </tr>
</table>
</form>

</body>
</html>



http://syaku.tistory.com



  • 김상호 at 2014.04.02 13:01

    안녕하세요..
    jquery 유효성 검사를 검색하다가 방문하였습니다.
    GitHub에서 다운받아서 Demo의 jaAction.submit.html를 실행해 보았습니다.
    그런데 궁금한게 2가지 있어 문의 드립니다.

    1.(다운받은 파일을 전혀 수정하지 않고 테스트했습니다.)
    아이디 부분에 length=2,4로 되어있고 영문 1글자를 입력하고 테스트하면
    "아이은(는) 2자로 입력하세요." 라는 경고창이 뜹니다.
    사용자 입장에서는 2글자로만 입력가능한 걸로 오인할 수 있을 것 같습니다.

    2. 각필드에 입력한 값을 trim 하고 유효성 체크를 하려면 따로 기능이있는지요?
    아니면 함수를 만들어 처리해야하나요? 이메일을 입력받을때 문자열 앞이나 뒤에 공백을 넣고 테스트해보니
    잘못 되었다고 나옵니다.

    좋은 프로그램 공개해 주셔서 감사합니다.

    • 샤쿠 syaku at 2014.04.03 10:27 신고

      2,4 는 2자 이상 4자이하로 입력하세요가 뜨는게 정상인데 입니다.
      수정하도록하겟습니다~

      유효성 체크를 할때 액션에선 trim을 하지 않습니다.
      직접 하시려면
      beforeAction : function() {
      }
      옵션을 추가하여 항목을 trim 하거나 직접 유효성 체크 소스를 넣으셔도 됩니다. return false; 인 경우 액션이 중단됩니다.

      beforeAction 가 실행된 후 필터(유효성)검사를 진행되는 게 순서입니다.

      데모 소스에 보시면 동의여부가 먼저 실행이 되는 것 처럼 말이죠~
      궁굼하신 사항은 언제든지 주십시요~

      대부분 다운만 받아가시던데 이렇게 댓글을 달아주신분은 첨이네요~ 감사해요~

댓글 남기기
◀ PREV 12345678910···14 NEXT ▶