FrontEnd

Chapter 05. 입력양식 작성하기

계란💕 2022. 4. 19. 10:14

1. 폼(form)이란?

  - 로그인하거나 사용자가 웹 사이트로 정보를 보낼 수 있는 모든 요소를 뜻한다.

  - 사용자가 작성한 정보는 웹 서버로 전송된다.

  - 웹서버는 ID와 PassWord가 일치하는지 확인하고 이를 웹 브라우저에 보낸다.

  - 정보를 검색 수정하는 과정은 모두 데이터베이스를 기반으로 작동한다. 

    -> 텍스트 박스나 버튼 같은 폼 형태는 HTML 태그로 만든다.

    -> 폼에 입력한 사용자 정보는 ASP나 PHP, JSP같은 서버 프로그래밍을 이용해야한다.

   - 폼의 기본형

    -> <form [속성="속성값"]>여러가지 폼 요소</form>

  - form 태그는 몇 가지 속성을 사용해서 입력받은 자료를 어떤 방식으로 서버에 넘기는지,

  - 서버에서 어떤 프로그램을 이용해서 처리할 것인지 지정한다. 

 

 

 

2. <form> 태그의 속성

  1) method: 사용자가 입력한 내용을 서버 쪽 프로그램으로 어떻게 넘겨줄 것인지를 지정한다.  (get/ post)

  2) name: 자바스크립트로 폼을 제어할 때, 사용할 폼의 이름을 지정한다.

  3) action: <form>태그 안의 내용을 처리해 줄 서버 프로그램을 지정한다.

  4) target: action 속성에서 지정한 스크립트 파일을 현재 창이 아닌 다른 위치에서 열도록 한다.

  5) anto complete: 자동 완성 기능을 나타낸다. (예전에 입력한 내용을 자동으로 표시해준다.)

    -> 중요한 개인 정보나 인증 번호와 같은 일회성 정보를 입력한다면 기억하지 않는 것이 좋다. 

    -> form태그의 autocomplete 속성을 off로 지정하면 끌 수 있다.  

  6) <fieldset>,<legend> 폼 요소를 그룹으로 묶는다.

    -> <legend>태그는 <fieldset>태그로 묶은 그룹에 제목을 붙일 수 있다.

 

  Ex) 폼 요소를 그룹으로 묶어 표현하기

<hide/>
<form action="">
    <fieldset>
      <legend>상품 선택</legend>
      
    </fieldset>
    <fieldset>
      <legend>배송 정보</legend>
      
    </fieldset>      
  </form>

  Note) 실행 결과

  - 주문양식에서 <fieldset>태그와 <legend>태그를 사용해서 상품 선택과 배송 정보를 그룹으로 묶었다.

 

 

  7) 폼 요소에 레이블을 붙이는 <label>태그

  Def) label: 입력란 가까이에 아이디나 비밀번호처럼 붙여놓은 텍스트를 말한다.

  - label은 <input>태그와 같은 폼 요소에 레이블을 붙일 때 사용한다.   

  - label 사용 방법

 

    (1) 태그 안에 폼 요소를 넣는다. 

<hide/>
 <label>아이디(6자 이상)<input type="text"></label>

 

 

    (2) <label>태그와 폼 요소를 따로 사용하고 <label>태그의 for속성과 폼 요소의 id 속성을 이용해서 서로 연결한다. 

    - 폼 요소의 id속성값을 <label> 태그의 for 속성에게 알려주는 방법을 사용한다.

    - 폼 요소에 연결된 <label> 태그에 for= "user-id"라고 입력해서 폼 요소와 레이블을 연결한다.

    - label태그를 사용한 레이블과 사용자 정보를 입력받는 input 태그가  떨어져있어도 둘 사이를 연결 가능하다.

<hide/>
 <label for="user-id">아이디(6자 이상)</label>
 <input type="text" id="user-id">

    Note) 실행 결과

 

3. 사용자 입력을 위한 input태그

  - 웹 사이트의 회원 가입이나 로그인 화면을 폼을 사용해서 작성한다.

  - 회원 가입 화면에서 마우스 오른쪽의 검사를 누르면 개발자 도구 창이 열린다.

  - 소스 코드에서 <input>태그를 확인할 수 있다. 

 

  Note) <input> 태그의 type속성 알아보기   

  1) 텍스트와 비밀 번호를 나타내는 type = "text"와 type ="password"

  2) 기본형

  3) 자주 사용하는 속성

    (1) size: 텍스트와 비밀번호의 길이를 지정한다.

    (2) value: 텍스트 필드 요소과 화면에 표시될 때, 텍스트 필드 부분에 보여주는 내용이다. 

    (3) maxlength: 텍스트 필드와 비밀번호 필드에 입력할 수 있는 최대 문자 수를 지정한다.

  

 

  Ex) 로그인 폼 만들기 

<hide/>
<form>
    <fieldset>
    	<label>아이디: <input type="text" id="user_id" size="10"></label>
      <label>비밀번호: <input type="password" id="user_pw" size="10"></label>
      <input type="submit" value="로그인">
    </fieldset>
  </form>

  - 아이디는 텍스트 타입, 비밀번호는 password타입으로 입력된 것을 볼 수 있다.

 

  Note) 실행 결과

 

 

  Note) 다양한 용도에 맞게 입력하는 type= "search", type= "url", type = "email", type = "tel"

    ->한 줄 짜리 일반 텍스트를 입력할 때는 텍스트 필드를 사용한다.

  1) type= "search": 검색을 위한 텍스트 필드로 인식한다.

     검색어를 입력하면 "X"표가 표시되어 입력한 검색으로 지울 수 있다.

  2) type= "url": 웹 주소를 입력하는 필드

  3) type = "email": 이메인 주소를 입력하는 필드, 지정한 형식에 맞지 않으면 오류 메시지를 보낸다.

  4) type = "tel": 전화번호를 나타낸다. 이 값을 이용해서 바로 전화를 걸 수 있다.

  5) type= "checkbox", type = "radio" 체크 박스와 라디오 버튼을 나타낸다.

  -  여러 항목 중에서 원하는 항목을 선택할 때, 사용하는 폼 요소

  - 라디오 버튼: 1개만 선택 / 체크 박스: 2개 이상 선택하는 경우

  - 라디오 버튼/ 체크 박스에서 사용되는 속성

    (1) value: 선택한 체크 박스나 라디오 버튼을 서버에게 알려줄 때 넘겨줄  값을 지정한다. (영문 or 숫자 필수 속성)

    (2) checked: 여러 항목 중 기본 값으로 선택하고 싶은 항목에 사용한다. 

  - 라디오 버튼에서 하나의 버튼만 선택할 수 있게 하려면 모든 라디오 버튼의 name값을 똑같이 지정할 수 있다.

  

 

  Ex) 회원 가입 신청서 만들기

  - [메일 수신] / [메일 수신 안 함]이라는 라디오 버튼을 만든다.

  - [가입하기] / [취소] 버튼을 추가한다.

<hide/>
<form>
        <fieldset>
          <legend>사용자 정보</legend>
          <ul>
            <li>
              <label for ="uid">아이디</label>
              <input type = "text" id = "uid">
            </li>
            <li>
              <label for = "umail">이메일</label>
              <input type = "email" id = "umail">
            </li>
            <li>
              <label for = "pwd1">비밀번호</label>
              <input type = "password" id="pwd1"> 
            </li>
            <li>
                <label for="pw2">비밀번호 확인</label>
                <input type = "password" id = "pwd2">
            </li>
          </ul>
        </fieldset>
        <fieldset>
          <legend>이벤트와 새로운 소식</legend>
          <input type = "radio" name = "mailing" id = "mailing_y">
          <label for = "mailing_y">메일 수신</label>
          <input type = "radio" name = "mailing" id = "mailng_n" checked>
          <label for = "mailing_n">메일 수신 안 함</label>
        </fieldset>
        <div id = "buttons">
          <input type = "submit" valur = "가입하기">
          <input type = "reset" value = "취소">
        </div>
      </form>

  Note) 실행 결과

 

 

  Ex) 숫자 입력 필드를 나타내는 type = "number" , type = "range"

  - 텍스트 필드에서 사용자가 숫자를 직접 선택할 수도 있지만  type = "number"를 사용하면 숫자 선택 가능

  - type = "range"는 슬라이드 막대를 움직여 숫자를 입력할 수 있다.

  - 2개의 스핀 박스를 만들어서 최솟값은 0, 최댓값은 각각 5, 3으로 지정했다.

    -> step속성을 지정하지 않았기 때문에 화살표를 누르면 1씩 커지거나 작아진다.

  - 두번째 스핀 박스에는 value= "1"을 지정해서 초깃값 1이 화면에 표시된다. 

  - type = "range"를 통해 숫자를 입력하는 슬라이딩 막대를 만들 수 있다. 

  - 

 

<hide/>
<ul>
        <li>
          <label><input type="checkbox" value="s_3">선물용 3kg</label>
          <input type="number" min="0" max="5">개 (최대 5개)
        </li>
        <li>
          <label><input type="checkbox" value="s_5">선물용 5kg</label>
          <input type="number" min="0" max="3" value="1">개 (최대 3개)
        </li>
      </ul>
      <ul>
        <li>
          <label><input type="checkbox" value="f_3">가정용 3kg</label>
          <input type="range" min="0" max="5">개 (최대 5개)
        </li>
        <li>
          <label><input type="checkbox" value="f_5">가정용 5kg</label>
          <input type="range" min="0" max="3" value="1">개 (최대 3개)
        </li>
      </ul>

 

  Note) 실행 결과

 

 

  Ex) 날짜 입력을 나타내는 type ="date" , type = "month", type = "week"

  - 웹 문서나 애플리케이션에 달력을 넣으려면 날짜 관련 유형을 이용한다.

  - 첫번째 달력에서 날짜를 선택하면 "연도-월-일"형식으로 입력되고 

 

 

  Ex) 시간 입력을 나타내는 type = "time", type = "datetime", type = "datetime-local"

  - 시간 지정 =>  type = "time"

    -> 폼에서 시간을 입력하도록 한다. 

  - 날짜와 시간을 함께 지정 =>  type = "datetime", type = "datetime-local"

    -> 사용자가 웹 문서를 보고 있는 지역에 맞는 날짜와 시간을 함께 입력할 수 있다.

  

 

  Ex) 전송, 리셋 버튼을 나타내는 type = "submit", type = "reset"

  - 전송 버튼을 나타내는 submit는 폼에 입력한 정보를 서버로 전송한다.

  - reset버튼을 <input>요소에 입력된 모든 정보를 재설정해서 내용을 모두 지운다. 

    -> 이 때, value 속성을 사용해서 버튼에 표시할 내용을 지정한다.

  

 

  Ex) 이미지 버튼을 나타내는 type = "image"

  - type = "image" 는 submit 버튼과 같은 기능을 하는 이미지 버튼을 나타낸다.

  

 

  Ex) 기본 버튼을 나타내는 type ="button" 

  - submit이나 reset 버튼과 같은 기능이 없고 오직 버튼 형태만 삽입한다.

  - 버튼을 삽입하여 자바스트립트 실행하기

  - 공지창열기 라는 버튼을 만들고 클릭하면 자바스크립트의 window.open() 함수를 실행한다.

  - 클릭하면 새 탭에서 연결한 문서가 나타난다. 

<hide/>
<form>
    <input type="button" value="공지 창 열기" onclick="window.open('notice.html')">
  </form>

  Note) 실행 결과

 

 

  Ex) 파일을 첨부할 때 사용하는 type = "file"

  - 폼에서 사진이나 문서를 첨부해야하는 경우에 사용한다.

  - 버튼을 클릭하면 [파일 선택]이나 [찾아보기] 버튼이 표시 되는데 클릭하고 파일을 선택하면 첨부한다.

 

  

  Ex) 히든 필드 만들 때 사용하는 type= "hidden"

  - 히든 필드는 화면에 보이지는 않지만 사용자가 입력을 마치면 폼과 함께 서버로 전송되는 요소이다.

  - 사용자에게 알려줄 필요는 없지만 관리자가 알아야하는 정보는히든 필드로 입력한다.

 

 

4. input 태그의 주요 속성

  1) 자동으로 입력 커서를 갖다 놓는 autofocus 속성

  - 페이지를 불러오자마자 폼에서 원하는 요소에 마우스 포인터를 표시할 수 있다. 

  - 사이트를 열자마자 특정 텍스트 필드에 마우스 커서가 깜빡 거린다. 

 

  2) 힌트를 표시해주는 placeholder 속성

  - 사용자가 텍스트를 입력할 때 입력란에 적당한 힌트 내용을 표시해서 필드를 클릭하면 내용이 사라진다. 

  ex) 아이디를 입력하세요.

 

 

  3) 읽기 전용 필드를 만들어주는 readonly 속성

  - 입력은 하지 못하고 읽게만 하는 읽기 전용 필드를 만들 수 이따.

  

 

  4) 필수 입력 필드를 지정하는 required 속성

  - 내용을 폼에 입력하면 서버에 폼을 전송해야하는데 이때 필수 필드에 필요한 내용이 모두 채워졌는지 검사한다.

 

 

  Ex)

<hide/>
<form>
    <fieldset>
      <legend>배송 정보</legend>
      <ul id="shipping">
        <li>
          <label for="prod">주문 상품</label>
          <input type="text" id="prod" value="상품용 3KG" readonly>
        </li>
        <li>
          <label for="user-name">이름 </label>
          <input type="text" id="user-name" autofocus required>
        </li>
        <li>
          <label for="addr">배송 주소</label> 
          <input type="text" id="addr" required>
        </li>
        <li>
          <label for="mail">이메일</label>
          <input type="email" id="mail">
        </li>        
        <li>
          <label for="phone">연락처</label>
          <input type="tel" id="phone" placeholder="하이픈 빼고 입력해 주세요.(01012345678)" required>
        </li>
        <li>
          <label for="d-day">배송 지정</label>
          <input type="date" id="d-day"> <small>(주문일로부터 최소 3일 이후)</small>
        </li>        
      </ul>  
    </fieldset>
    <div>
      <input type="submit" value="주문하기"> 
      <input type="reset" value="취소하기">
    </div>        
  </form>

 

  Note) 실행 결과

  - 초기 화면 (이름 텍스트 필드에 커서가 깜빡 거린다.)

  - 주문하기 버튼을 누른 후

 

  Ex) 회원 가입 신청서에 속성 지정하기

  - autofocus, placeholder 속성을 넣는다.

  - checked 속성을 넣는다.

<hide/>
 <ul>
            <li>
              <label for="uid">아이디</label>
              <input type="text" id="uid" autofocus placeholder="4자 ~ 10자 사이, 공백없이" required> 
            </li>
            <li>
              <label for="umail">이메일</label>
              <input type="email" id="umail" required > 
            </li>
            <li>
              <label for="pwd1">비밀번호</label>
              <input type="password" id="pwd1" placeholder = "문자와 숫자, 특수 기호 포함" required> 
            </li>        
            <li>
              <label for="pw2">비밀번호 확인</label>
              <input type="password" id="pwd2" required> 
            </li>
          </ul>
<hide/>
 <fieldset>
          <legend>이벤트와 새로운 소식</legend>
          <input type="radio" name="mailing" id="mailing_y" value="mailing_yes">
          <label for="mailing_y">메일 수신</label>
          <input type="radio" name="mailing" id="mailing_n" value="mailing_no" checked>
          <label for="mailing_n">메일 수신 안 함</label>     
        </fieldset>

  Note) 실행 결과

 

 

5. 폼에서 사용하는 여러가지 태그

  1) 여러 줄을 입력하는 텍스트 영역 <textarea>태그

  - 폼에서 텍스트를 여러 줄 입력하는 영역을 만들 수 있다.

  - 회원가입 양식에서 사용자 약관을 표시할 때 사용한다.

 

 

 

  2) 드롭다운 목록을 만들어주는 <select>, <option>태그 

  - 사용자가 내용을 직접 입력하지 않고 여러 옵션 중에서 선택하게 하려면 드롭 다운이나 데이터 목록을 사용한다.

  - 드롭 다운 목록은 목록을 클릭했을 때, 옵션이 아래쪽으로 펼쳐져서 붙은 이름이다. 

  - <select>태그의 속성 

    -> 옵션이 하나만 표시되는데 화살표 버튼을 클릭하면 나머지 옵션 중 필요한 항목을 선택 가능하다.

    -> size나 multiple을 통해 항목의 개수를 조절할 수 있다.

  - <option> 태그의 속성

    -> 드롭다운 목록에 표시되는 옵션은 <option>태그를 이용해 지정한다.

    -> value (해당 항목을 선택할 때, 서버로 넘겨줄 값을 지정한다.)

    -> selected (드롭다운 메뉴를 삽입할 때, 기본적으로 선택해서 보여 줄 항목을 지정한다.) 

 

 

  3) 데이터 목록을 만드는 <datalist>, <option> 태그

  - 데이터 목록을 사용하면 텍스트 필드에 값을 직접 입력하지 않고 미리 만들어 놓은 값중 선택 가능하다.

  - <datalist>태그를 이용해서 데이터 목록의 시작과 끝을 표시하고 그 사이에 <option> 태그를 사용해 각 데이터의 옵션을 표시한다.

  - 이 때, value 속성을 사용해서 서버로 넘겨줄 값을 지정하는데, 이 값이 텍스트 필드에도 나타난다.

 

 

  Ex) 데이터 목록 만들기

  - 포장 여부를 데이터 목록으로 만들고 텍스트 필드에서 그 값을 선택해서 사용한다. 

<hide/>
<label for="prod2">포장 여부 </label>
    <input type="text" id="prod2" list="pack">
    <datalist id="pack">
      <option value="package">선물 포장</option>
      <option value="no_package">포장 안 함</option>
    </datalist>

  Note) 실행 결과

 

 

  4) 버튼을 만들어 주는 <button>태그

  - 버튼 태그를 이용해서 폼을 전송하거나 리셋하는 버튼을 삽입할 수 있다. 

  - 그리고 주문하기 버튼에서느
  -  <button>태그의 type 속성

    -> submit: 폼을 서버로 전송한다. 

    -> reset: 폼에 입력한 내용을 초기화한다

    -> button: 버튼 형태를 만든다.

 

 

  Ex)드롭다운 목록과 텍스트 영역 추가하기

  - placeholder속성을 사용해서 힌트를 남겨준다. 

<hide/>
<li>
              <label for = "path">가입 경로</label>
              <select id = "path">
                <option value = "blog">블로그</option>
                <option value = "search">검색</option>
                <option value = "sns">SNS</option>
                <option value = "etc">기타</option>
              </select>
            </li>
<hide/>
<li>
              <label for = "memo">메모</label>
              <textarea cols = "40" rows = "4" placeholder="남길 말씀이 있다면 여기에"></textarea>
            </li>

 

 

  Note) 실행 결과

 

 

  Ex) 마무리 문제 1)

<hide/>
<form>
		<ul>
			<li>
				<label for = "r-name">이름</label>
				<input type = "text" id = r-name">
			</li>
			<li>
				<label for = "r-phone">전 화</label>
				<input type = "tel" id = r-phone">
			</li>
			<li>
				<label for = "r-email">이메일</label>
				<input type = "email" id = r-email">
			</li>
			<li>
				<input type = "submit" value = "예약하기">
			</li>
		</ul>
	</form>

  Note) 실행 결과

 

 

  Ex) 마무리 문제 2) 

<hide/>
<form>
				<h4>개인 정보</h4>
				<ul>
					<li>
						<label for = "sname">이름</label>
						<input type="text" placeholder="공백 없이 입력하세요" >
					</li>
					<li>
						<label for = "sphone">연락처</label>
						<input type = "tel">
					</li>
				</ul>
				<h4>지원 분야</h4>
				<ul>
					<input type = "radio" >
					<label for = "publishing">웹 퍼블시링</label>
					<br>
					<input type = "radio" >
					<label for = "app">웹 애플리케이션 개발</label>
					<br>
					<input type = "radio" >
					<label for = "eg">개발 환경 개선</label>
				</ul>
				<label>
					<h4>지원동기</h4>
					<textarea id="motive" cols="60" rows="5" placeholder="본사 지원 동기를 간략히 써 주세요."></textarea>
				</label>
					<input type = "submit" value = "접수하기">
					<input type = "reset" value = "다시 쓰기">

			</form>

  Note) 실행 결과