본문 바로가기
Front-End/JavaScript

JavaScript(7) - 실습 : 회원가입

by newny 2023. 2. 17.
반응형

id중복확인과 id적용은 아직 수업진도가 안나가서 나중에 추가할 예정
부트스트랩을 이용하여 좀더 깔끔하게 만들었음

 textarea 의 오른쪽 끝부분에 외부에서 사이즈 조정을할 수 있는 resize버튼이 있었는데 resize:none 처리를 하여 없앴음
[결과]

[html 코드]

<!DOCTYPE html>
<html lang="ko">
<head>
  
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
  <title>01_회원가입</title>
  
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
  <script src="member.js"></script>

  <style>
    textarea {
      resize: none;
    }
  </style>

</head>


<body>
  <div class="container">
    <h3>회원가입</h3>
    <form name="memfrm" id="memfrm" action="ok.jsp" onsubmit="return validate()">
      <table class="table">
        <tr>
          <td>
            <div class="form-group">
              <label for="uname">이름</label>
              <input type="text" id="uname" class="form-control">
              <p id="uname_text"></p>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="form-group">
              <label for="uid">아이디</label>
              <input type="text" id="uid" name="uid" class="form-control">
              <p id="uid_text"></p>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <input type="button" value="ID중복확인" class="btn btn-primary" onclick="getID()">
            <input type="button" value="ID적용" class="btn btn-success" onclick="setID()">
          </td>
        </tr>
        <tr>
          <td>
            <div class="form-group">
              <label for="upw">비밀번호</label>
              <input type="password" id="upw" name="upw" class="form-control">
              <p id="upw_text"></p>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="form-group">
              <label for="jumin">주민등록번호</label>
              <input type="number" id="jumin1" name="jumin1" class="form-control">
              <p id="jumin1_text"></p>
              <input type="password" id="jumin2" name="jumin2" class="form-control">
              <p id="jumin2_text"></p>
            </div>
          </td>
        </tr>
        <tr>
          <td style="padding: 15px;">
            <div class="form-group">
              <textarea class="form-control" rows="5" id="comment">이용 약관 동의 내용 생략</textarea>
            </div>
              <div class="checkbox">
                <label><input type="checkbox" id="checkbox">이용 약관 동의</label>
              </div>
            </div>
          </td>
        </tr>
        <tr>
          <td>
            <div class="form-group">
              <input type="submit" value="확인" class="btn btn-info">
              <input type="reset" value="취소" class="btn btn-danger">
            </div>
          </td>
        </tr>
      </table>
    </form>
  </div>

</body>
</html>


[js 코드]

/* member.js */

const validate = () => {
  // 이름
  // 1. 두글자 이상
  // 2. trim() 적용
  // 조건 불만족시
  // 입력창 아래에 "두 글자 이상의 한글 또는 영문만 사용 가능합니다." 출력(color:red)
  // 해당 폼이 서버로 전송되는것을 차단
  // 커서가 입력창으로 가게하기
  let uname = document.getElementById('uname').value
  uname = uname.trim()
  if(uname.length<2) {
    let uname_text = document.getElementById('uname_text')
    uname_text.textContent = "두 글자 이상의 문자를 입력해주세요."
    uname_text.style.color = "red"
    document.getElementById('uname').focus()
    return false
  } else {
    uname_text.textContent = ""
  }

  // 아이디
  // 1. 5~20자 사이
  // 2. trim() 적용
  // 조건 불만족시
  // 입력창 아래에 "5~20자의 숫자 또는 문자를 입력해주세요." 출력(color:red)
  // 해당 폼이 서버로 전송되는것을 차단
  // 커서가 입력창으로 가게하기
  let uid = document.getElementById('uid').value
  uid = uid.trim()
  if(uid.length<5 || uid.length>20) {
    const uid_text = document.getElementById('uid_text')
    uid_text.textContent = "5~20자의 숫자 또는 문자를 입력해주세요."
    uid_text.style.color = "red"
    document.getElementById('uid').focus()
    return false
  } else {
    uid_text.textContent = ""
  }

  // 비밀번호
  // 1. 8~16자 사이
  // 2. trim() 적용
  // 조건 불만족시
  // 입력창 아래에 "8~16자의 숫자 또는 문자를 입력해주세요." 출력(color:red)
  // 해당 폼이 서버로 전송되는것을 차단
  // 커서가 입력창으로 가게하기
  let upw = document.getElementById('upw').value
  upw = upw.trim()
  if(upw.length<8 || upw.length>16) {
    const upw_text = document.getElementById('upw_text')
    upw_text.textContent = "8~16자의 숫자 또는 문자를 입력해주세요."
    upw_text.style.color = "red"
    document.getElementById('upw').focus()
    return false
  } else {
    upw_text.textContent = ""
  }

  // 주민번호1
  // 1. 6자의 숫자
  // 2. trim() 적용
  // 조건 불만족시
  // 입력창 아래에 "주민등록번호 앞 6자리의 숫자를 입력해주세요."
  let jumin1 = document.getElementById('jumin1').value
  if(jumin1.length !== 6) {
    const jumin1_text = document.getElementById('jumin1_text')
    jumin1_text.textContent = "주민등록번호 앞 6자리의 숫자를 입력해주세요."
    jumin1_text.style.color = "red"
    document.getElementById('jumin1').focus()
    return false
  } else {
    jumin1_text.textContent = ""
  }

  // 주민번호2
  // 1. 7자의 숫자
  // 2. trim() 적용
  // 조건 불만족시
  // 입력창 아래에 "주민등록번호 뒤 7자리의 숫자를 입력해주세요." 출력(color:red)
  let jumin2 = document.getElementById('jumin2').value
  jumin2 = jumin2.trim()
  if(jumin2.length<8 || jumin2.length>16) {
    const jumin2_text = document.getElementById('jumin2_text')
    jumin2_text.textContent = "주민등록번호 뒤 7자리의 숫자를 입력해주세요."
    jumin2_text.style.color = "red"
    document.getElementById('jumin2').focus()
    return false
  } else {
    jumin2_text.textContent = ""
  }

  // 이용약관 동의 (필수)
  // 1. scroll 창에 약관 내용
  // 2. 체크박스 체크
  // 조건 불만족시
  // alert로 "이용약관에 동의해주세요"
  let checkbox = document.getElementById('checkbox')
  if(checkbox.checked === false) {
    alert('이용약관에 동의해주세요')
    return false
  }
  

  alert('가입이 완료되었습니다')
  return true
}
반응형

'Front-End > JavaScript' 카테고리의 다른 글

JavaScript - to do list 만들기  (0) 2023.02.18
자바스크립트 예제(6)  (0) 2023.02.16
JavaScript(6)-2  (0) 2023.02.16

댓글