HTML form과 내부 태그와 속성
이전에도 Android만 하지말고 Web Front로 방향을 잡아라는 친한 동생의 이야기에 웃어 넘긴적이 있다. 근래에는 JavaScript와 HTML만 보고있는데도 느끼는건 시간이 많이 부족하다. 볼 양이 많아서 너무 행복하다 ^^*
1. HTML <form>
- user에게는 보이지 않는 container
- inputs, checkboxes, buttons, etc로 구성
- 그룹화된 전송하는 데이터의 모든 입력을 담는 상자
form
을 제출하면 HTTP요청이 전송된다.action
attribute를 사용하여 제어한다.
HTTP method
get
&set
이 있다.
2. <form>
의 내부 태그들
3. <input>
type
attribute로 input태그의 형식을 정한다.- closing tag 없다.
4. <input>
’s attribute
-
type
<input type="type's value">
text
password
color
: 브라우저에따라 color picker가 다를 수 있다.number
:text
와 비슷하나 숫자만 입력되고 방향키 가능name
- 서버와 통신하는
key
값으로 서버가 찾으려는 간단한 값이다.
https://www.anymous-website-example.com/login_action?user=유저명&pwd=비밀번호&birth=생일...
각 input 태그에 저장된 정보가 form의 action 속성인 login_action을 통해 input의 name에 지정된 이름(user, pwd, birth)와 같은 키값으로 입력된 value(유저명, 비밀번호, 생일)를 전송한다.
해당 /접속주소?key=value&key2=value2 의 형태로 GUI를 이용하지 않고, google검색이나 해당 동작을 주소창에서 할 수도 있다.checkbox
checkbox
는 꼭<label>
처리 한다.
<div>
<input type="checkbox" id="giant" name="giant" checked />
<label for="giant">Giant</label>
</div>
<div>
<input type="checkbox" id="merida" name="merida" />
<label for="merida">Merida</label>
</div>
<form>
<input type="checkbox" id="checked" name="checked" />
<label for="checked"></label>
<button>전송</button>
<!-- 체크 후 전송 시 https://주소.도메인/action?checked=on 체크하지 않았을 도 보내지 않는다.-->
</form>
radio
checkbox
와 비슷하지만 중복선택이 가능한checkbox
와는 다르게 단일값만 선택 가능하다.
<form>
<p>choose your bike size</p>
<label for="s">S(47)</label>
<input type="radio" name="size" id="s" value="s" />
<label for="m">M(50)</label>
<input type="radio" name="size" id="m" value="m" />
<label for="l">L(53)</label>
<input type="radio" name="size" id="l" value="l" />
<button>전송</button>
<!-- value를 지정해줘야 선택한 값이 전송된다. 라디오버튼을 묶기 위해서는 name 한 값으로 줘야한다.-->
</form>
range
- 범위를 만들어서 그 값을 선택하게한다.
- 최소값, 최대값을 제어가능하다.
<div>
<label for="quantity">수량</label>
<input
type="range"
id="quantity"
min="0"
max="65535"
step="100"
value="32267"
name="quantity"
/>
</div>
<!--
수평으로된 범위(andrid progressbar)선택 gui가 출력된다.
step: 한눈금단 단위
value: 초기값
submit 시 정해진 범위로 /주소?key=value
type="number"일 때도 min, max값을 지정하면 지정한 범위만큼 입력가능하다.
-->
placeholder
<input type="..." placeholder="(ex: username, enter password, etc)" />
모든
<input>
에서 적용되지는 않는다.
5. <select>
<label for="color">choose your bike color</label>
<select name="color" id="color-selected">
<option value="choose color">select color</option>
<option value="black">Metal Black</option>
<option value="silver">Shiny Silver</option>
<option value="blue">Ocean Blue</option>
<option value="red">Fire Red</option>
</select>
<!-- value값이 키값인 color로 전송된다. 단순 문자열은 UI일뿐 -->
6. <label>
- 접근성이 좋고 form을 편하게 해준다.
<form>
<div>
<!-- 표준 -->
<label for="specialized">like Specialized</label>
<input type="checkbox" name="specialized" id="specialized" />
</div>
<!-- 비표준 -->
<div>
<label>
like Trek
<input type="checkbox" name="trek" id="trek" />
</label>
</div>
</form>
<label>
의for
attribute와<input>
의id
attribute로 연결점생김.
id
는 identify, 유일한 값을 가져야한다.
7. <button>
<div>
<button>그냥버튼</button>
<form>
<button type="button">그냥 버튼</button>
<button>form action으로 전송</button>
<input type="submit" value="button전송과 같은 동작" />
</form>
</div>
<form>
안에 위치할 경우 기본값이submit
,<form>
의action
attribute와 연동되어 따로 명시하지 않으면 전송한다.
8. <textarea>
- 복수의 줄을 입력하는 입력창이 출력된다.
- Android:View/TextView/maxLine: 지정과 같은 모양(모양만 같다 동작은 다르다.)
<div>
<label for="review">상품 리뷰</label>
<textarea id="review" row="5" cols="50" name="review" placeholder="input your review">
</div>
참조
MDN:HTML/Element/form
MDN:HTML/Element/input
MDN:HTML/Element/select
MDN:HTML/Element/button
MDN:HTML/Element/Input/radio
MDN:HTML/Element/Input/checkbox
MDN:HTML/Element/Input/range
MDN:HTML/Element/textarea