웹 상에서 사용자의 입력을 받아서, 클라이언트에서 서버로 정보를 제출하기 위한 요소(Element)
<form>
태그 사용
주요 속성(Attribute)
⭐️ action : 폼 데이터를 보낼 URI 지정
submit, button 등을 통해 사용자가 데이터를 제출하는 이벤트가 발생했을 때, 입력받은 데이터를 어디로 보낼지 지정
참고) URI란? Uniform Resource Identifier. 리소스의 위치를 식별하기 위한 문자열.(cf- URL은 URI의 하위 개념)
다른 웹 페이지 주소, 서버의 주소, 프로젝트 내 다른 HTML 파일 등
method : GET, POST 등 양식을 제출할 때 사용할 HTTP 메소드
GET : action에 명시한 URI에 Query Parameter(?뒤로 오는 값)형태로 이어 붙여서 전송(Default, 기본값)
POST : Request Body에 데이터를 넣어서 전송
id : form의 식별자
<form>
태그는 입력 받을 부분 전체를 감싸는 껍데기 같은 느낌
form 태그 하위에 <input>
, <select>
, <textarea>
태그를 작성하여 실제 입력을 받음
<input>
태그는 가장 대표적인 form 요소
주요속성
<input type="text">
(default)
<input type="email">
<input type="password">
<input type="checkbox">
<input type="radio">
<input type="button">
<input type="submit">
<input type="date">
<input type="file">
<input type="number">
<input type="color">
주요속성
type : type 속성의 값에 따라 input type이 정해지며, 여러가지 종류의 입력을 받을 수 있다.
name : 데이터를 제출하기 위한 이름 지정
value : input의 값 지정. 초기값이 있을 때 등 사용(참고-추후 React, Vue에서는 state 값 등 변수처럼 지정 가능)
placeholder : 값이 입력되기 전 사용자에게 힌트 제공
Required: 사용자가 반드시 입력해야 하는 구간을 입력하지 않았을 시 너 입력해야돼!라고 경고메시지를 보여주는 것
disabled: 비활성화 기능
checked: 선택된 상태로 속성 지정
input
은 인라인 요소
이다 (cf. <br>
태그)
input을 여러개를 작성하면 줄바꿈을 하고 싶을 때, 간단하게 줄바꿈 가능
div 태그로 감싸서 구분 가능
text (default)
password
input
<input type="eamil" name="useremail" placeholder="Email을 입력하세요" required> <input type="password" name="password" placeholder="비밀번호를 입력하세요" required> <input type="submit" value="로그인">
output
<textarea>
: 여러줄의 text를 입력받을 수 있는 태그
예) 댓글, 리뷰 등
주요 속성
1)
<input type=”button” value=”Click me!”>
2)
<button>Click me!</button>
Click me!
둘의 차이점? input은 일반 텍스트만 표현 가능, button은 어떤 요소든 하위에 포함 가능
button 태그의 장점은 CSS로 버튼을 다양하게 스타일링하여 활용할 수 있다는 것
<button>
태그의 주요 속성(attribute)
type
submit(default) : 서버로 form 데이터를 제출
reset : 모든 폼을 기본 값으로 바꾼다.
button : 순수하게 클릭 이벤트를 받으며, 별도로 함수를 연결시켜주지 않으면 아무것도 하지 않음
name : 데이터를 제출하기 위한 이름 지정
value : 초기값
disabled : 비활성화된 버튼
<input>
은 항상 <label>
과 함께 쓰는 것이 좋다.id 속성 값
- label의 for 속성 값
을 매핑시킨다.<label for="name">이름:</label> <input type="text" id="name" />
또 다른 방법
<label>Click me <input type="text"></label>
<input type=”checkbox”>
속성(Attribute)
name : form 제출 시 표시되는 이름. 전달할 값의 이름.
value : 전달할 값. 체크박스의 값을 나타내는 문자열
사용자에게 노출되지 않으나, form 데이터를 받은 곳(action에 명시한 곳 or 이벤트 핸들링 함수)에서 데이터를 받아서 처리할 때 name과 함께 사용
checkbox에서는 value가 명시되지 않으면, default value는 “on”으로 전송된다
id
: label
의 for
속성과 연결
checked (boolean 속성) : default로 체크되어있는지 여부.
(해당 속성을 명시하지 않으면 속성값이 자동으로 false 값을 가지게 되며, 명시하면 자동으로 true 값을 가지게 됩니다.)
참고) 서버에 제출되는 형태 예시
name이 같은 입력이 있는 경우 : [주소]?location=in&menu=steak&menu=pasta&stars=great
(같은 입력이 값만 다르게 나타남)
name이 모두 다른 경우 : [주소]?location=in&eatSteak=true&eatPasta=true&stars=great
(일반적인 경우)
<input type=”radio”>
체크박스(checkbox)와의 차이점?
속성(Attribute) 작성 방법
name : form 제출 시 표시되는 이름. 전달할 값의 이름. 한 그룹은 반드시 같은 name으로 지정해줘야 함
name을 다르게 주면, 별도의 그룹으로 인식된다.
자주하는 실수! 하나만 선택되어야 하는 상황에서 여러개가 선택되는 버그(오동작)이 발생할 수 있음 주의
value : 전달할 값. 선택된 값을 나타내는 문자열 (name=value형태로 제출)
사용자에게 노출되지 않으나, form 데이터를 받은 곳(action에 명시한 곳 or 이벤트 핸들링 함수)에서 데이터를 받아서 처리할 때 name과 함께 사용
한 그룹(동일 name) 내에서 unique한(즉, 서로 다른) value를 가져야 함
radio에서 value가 명시되지 않으면, default value는 “on”으로 전송된다 (유의미한 radio가 되기 위해 반드시 value를 적어줘야 함)
id : label의 for 속성과 연결
checked : default로 체크되어있는지 여부
1) <select>
태그로 감싼다
name(필수) : 전달할 값의 이름
id : label의 for 속성과 연결
form : form의 id 속성과 연결 ( select 가 form 하위에 속하지 않을 때를 위해)
2) 그 하위에 <option>
으로 선택지를 하나씩 추가한다.
(실제로 선택지가 어떻게 보일지는 option의 여는태그와 닫는태그 사이에 컨텐츠 값을 적는거에 달렸음)
value : 해당 선택지의 값을 나타내는 문자열. 전달할 값
selected : 해당 option이 초기에 선택되어 있도록 지정