์ค๋์ Form control ์์๋ค๊ณผ ์์ฑ, Form ์ด๋ฒคํธ์ ๋ํด ์ ๋ฆฌํ๋ค.
front ๋จ์์ ์๋ฒ์ ์ํตํ๋ ๊ณต๊ฐ !
๐ Form
Form์ ๊ฐ๋ ๋ฐ ์ญํ
- ์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ์ ์๋ฒ์์ ์ฒ๋ฆฌํ๊ธฐ ์ํ์ฌ ์ฌ์ฉ
- ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ์๋ฒ๋ HTML form์ ์ ๋ฌ
- ์ฌ์ฉ์๋ HTML form์ ์ ์ ํ ๋ฐ์ดํฐ ์ ๋ ฅ ํ ์๋ฒ๋ก ์ ์กํจ (submit)
- ์๋ฒ๋ ์ฌ์ฉ์์ ์์ฒญ ๋ถ์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ฑ๋กํ๊ฑฐ๋, ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํจ
๐ Form์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ณ , ๋ณด๋ผ ์ ์๋ ์์
Form ์์ฑ
<form [์์ฑ="์์ฑ๊ฐ"]> form control </form>
๐ form control ์์
form control์ด๋?
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ control ์์๋ค์ ๋ชจ๋ <form> ํ๊ทธ์ ํ์์ ์์นํด์ผ๋ง ์๋ฒ๋ก ์ ์ก๋๋ค.
- ๊ฐ control ์์๋ง๋ค ํ ์คํธ ์ ๋ ฅ, ๋ฒํผ ํด๋ฆญ ๋ฑ ๋ค์ํ ํ์์ผ๋ก ์ ๋ ฅ๋ฐ์ ์ ์๋ค.
tag | ์ค๋ช |
<form> | ์ฌ์ฉ์์๊ฒ ์ ๋ ฅ ๋ฐ์ ํญ๋ชฉ์ ์ ์, form tag ๋ด๋ถ์ ์ฌ๋ฌ ๊ฐ์ control ์์๋ฅผ ํฌํจ |
<input> | ํ ์คํธ box, ์ฒดํฌ box, ๋ผ๋์ค ๋ฒํผ ๋ฑ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ ์ ์๋๋ก ํจ |
<textarea> | ์ฌ๋ฌ ์ค์ ๋ฌธ์๋ฅผ ์ ๋ ฅํ ์ ์๋๋ก ํจ |
<button> | ๋ฒํผ์ ํ์ |
<select> | select box(dropdown, combobox)๋ฅผ ํ์ |
<optgroup> | select box์ ๊ฐ ํญ๋ชฉ๋ค์ ๊ทธ๋ฃนํ |
<label> | ๋ง์ฐ์ค๋ฅผ ์ด์ฉํ์ฌ <input> ํญ๋ชฉ ์ ํ ์ ํธ๋ฆฌํจ์ ์ ๊ณต, for ์์ฑ์ ์ด์ฉํ์ฌ ๋ค๋ฅธ control ์์์ ํ ์ค๋ฅผ ์ฐ๊ฒฐ์์ผ์ ๋ ํธ๋ฆฌํ๊ฒ ์ ํํ ์ ์๋๋ก ํจ |
<fieldset> | ์ ๋ ฅ ํญ๋ชฉ๋ค์ ๊ทธ๋ฃนํ |
<legend> | <fieldset>์ ์ ๋ชฉ์ ์ง์ |
๐ <form> ํ๊ทธ๋ ์ ๋ ฅ๋ฐ์ ์์๋ค์ ๋ด๋ ํ๋์ ์์์ ์๋ฏธ, ๋๋จธ์ง ํ๊ทธ๋ค์ ๊ทธ ์์์ ๊ตฌ์ฑํ๋ ์ ๋ ฅ ๋๊ตฌ!
๐ ๋ฐ์ดํฐ ์ ์ก์ ์ํ ์์ฑ
form์์ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ํ์ํ ์์ฑ๋ค
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์๋ฃ๋ค์ ์ด๋ค ๋ฐฉ์์ผ๋ก ์๋ฒ๋ก ์ ๋ฌํ ๊ฒ์ธ์ง ๊ฒฐ์
- ์๋ฒ์์ ์ด๋ค ํ๋ก๊ทธ๋จ์ ์ด์ฉํด ์ฒ๋ฆฌํ ๊ฒ์ธ์ง ๊ฒฐ์
์์ฑ | ์ค๋ช | |
method | ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ด์ฉ์ ์๋ฒ ์ชฝ ํ๋ก๊ทธ๋จ์ผ๋ก ์ด๋ป๊ฒ ๋๊ฒจ์ค์ง ์ง์ ํจ | |
์์ฑ๊ฐ | GET ์ฃผ์ ํ์์ค์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ด์ฉ์ด ํ์๋๋ฉฐ, ์ ์ก ๋ด์ฉ ๊ธธ์ด ์ ํ์ด ์์ |
|
POST ์ ์ก ๋ด์ฉ ๊ธธ์ด์ ์ ํ์ด ์์ผ๋ฉฐ, ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ด์ฉ์ด ํ์๋์ง ์์ |
||
name | form์ ์ด๋ฆ์ ์ง์ . ํ ๋ฌธ์ ์์ ์ฌ๋ฌ ๊ฐ์ <form> ํ๊ทธ๊ฐ ์์ ๊ฒฝ์ฐ, ๊ตฌ๋ถ์๋ก ์ฌ์ฉํจ | |
action | <form> ํ๊ทธ ์์ ๋ด์ฉ๋ค์ ์ฒ๋ฆฌํด ์ค ์๋ฒ์์ ํ๋ก๊ทธ๋จ์ ์ง์ ํจ (URL) | |
target | <action> ํ๊ทธ์์ ์ง์ ํ ์คํฌ๋ฆฝํธ ํ์ผ์ ํ์ฌ ์ฐฝ์ด ์๋ ๋ค๋ฅธ ์์น์ ์ด๋๋ก ์ง์ ํจ | |
autocomplete | ์๋์์ฑ ๊ธฐ๋ฅ์ผ๋ก, ๊ธฐ๋ณธ๊ฐ์ on |
GET๊ณผ POST ์ฐจ์ด์
- GET์ HTTP ๋ฉ์์ง์ header ์์ญ์ ๋ด์ ์ ์กํ๊ธฐ ๋๋ฌธ์
์ ์ก ๊ธธ์ด ์ ํ(256~204bytes)์ด ์๊ณ , ์ฃผ์์ ๋ฐ์ดํฐ๊ฐ ๋ ธ์ถ๋๋ค. - POST๋ HTTP ๋ฉ์์ง์ body ์์ญ์ ๋ด์ ์ ์กํ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์ ์ผ๋ก IO๊ฐ ์ผ์ด๋๋ค.
๋ฐ๋ผ์ ์ ์ก ๋ด์ฉ์ ๊ธธ์ด์ ์ ํ์ด ์๊ณ , ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ ๋ณด๊ฐ ์ฃผ์์ ํ์๋์ง ์๋๋ค.
์ธ์ GET or POST๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น?
- POST
ํ์ด์ง ๋จ์์ ๋ง์ ์์ ๋ฐ์ดํฐ ์ ์ก, ํน์ ๋ณด์์ด ํ์ํ ์ ๋ณด๋ฅผ ์ ์กํ ๋ - GET
์งง์ ์์ ๋ฐ์ดํฐ, ํน์ ๋ ธ์ถ๋์ด๋ ์๊ด์๋ ์ ๋ณด๋ฅผ ์ ์กํ ๋
(GET์ ๊ธธ์ด ์ ํ์ ์ด๊ณผํ๋ ๋ฐ์ดํฐ ์ ์ก์ด ๋ถ๊ฐํ ๊ฒ์ ์๋์ง๋ง, ์งค๋ ค์ ์ ์ก๋จ)
page ์ด๋ ์ GET๊ณผ POST ๊ตฌ๋ถ ๋ฐฉ๋ฒ
page ์ด๋์๋ ์๋ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
- ์ฃผ์ ํ์์ค ์ ๋ ฅ
- aํ๊ทธ๋ฅผ ์ด์ฉํ link ์ด๋
- form์ ์ด์ฉํ ์ด๋ (GET, POST ๋ฐฉ์)
์ฌ๊ธฐ์ 1, 2๋ฒ ๋ฐ 3๋ฒ์ GET ๋ฐฉ์ ์ ์ก์ ๋ชจ๋ GET์ด๊ณ ,
์ ์ผํ๊ฒ 3๋ฒ์ form์ ์ด์ฉํ POST ๋ฐฉ์ ์ ์ก๋ง์ด POST์ด๋ค.
๐ POST๋ผ๊ณ ๋ช ์ํ์ง ์์ผ๋ฉด ๋ชจ๋ GET์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๐ Form ์์ฑ ์์
form ์์ ํ์ด์ง ๋ฐ ์ฝ๋
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>ํ์๊ฐ์
</title>
</head>
<body>
<h1>ํ์๊ฐ์
</h1>
<form method="POST" action="register.jsp">
<fieldset>
<legend>์ฌ์ฉ์ ์ ๋ณด</legend>
<label for="id">์์ด๋ </label>
<input type="text" placeholder="ํ์ ์
๋ ฅ" id="id" required/></br>
<label for="password">๋น๋ฐ๋ฒํธ </label>
<input type="password" placeholder="ํ์ ์
๋ ฅ" id="pass" required/></br>
<label>์ฑ๋ณ </label>
๋จ<input type="radio" name="sex"/>
์ฌ<input type="radio" name="sex"/></br>
<label>๊ด์ฌ๋ถ์ผ </label>
<input type="checkbox" name="sub"/>์ํ
<input type="checkbox" name="sub"/>์์
<input type="checkbox" name="sub"/>๋ฏธ์ </br>
<label>์ํ๋ฉ์์ง</label></br>
<textarea cols="30" rows="5"></textarea></br>
<input type="submit" value="๋ฑ๋ก">
<input type="reset" value="์ด๊ธฐํ">
</fieldset>
</form>
</body>
</html>
๐ Form ์ด๋ฒคํธ
์ด๋ฒคํธ๋?
- ์น ํ์ด์ง์์ ์ฌ๋ฌ ์ํธ์์ฉ์ด ์์ ๋๋ง๋ค ๋ฐ์
- ๋ง์ฐ์ค ํด๋ฆญ ํน์ ํค๋ณด๋๋ฅผ ๋๋ ์ ๋์ ๊ฐ์ด ๋ค์ํ ์ข
๋ฅ์ ์ด๋ฒคํธ ์กด์ฌ
(์น ํ์ด์ง ๋ก๋ฉ, ํ์ด์ง ์คํฌ๋กค, ๋ธ๋ผ์ฐ์ ์ฐฝ ํฌ๊ธฐ ์กฐ์ , ๋ง์ฐ์ค ํด๋ฆญ, Form submit ๋ฑ) - JavaScript๋ฅผ ์ฌ์ฉํ์ฌ DOM์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ ๊ฐ์ง, ์ด๋ฒคํธ์ ๋์ํ๋ ์ฌ๋ฌ ์์ ์ํ
- ์ด๋ฒคํธ๋ ์ผ๋ฐ์ ์ผ๋ก ํจ์์ ์ฐ๊ฒฐ, ์ด๋ฒคํธ ๋ฐ์ ์ ํจ์ ์คํ (์ด๋ฒคํธ ํธ๋ค๋ฌ ํน์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ผ๊ณ ๋ถ๋ฆ)
Form ์ด๋ฒคํธ
- form์ด ์ ์ก๋ ๋๋ submit ์ด๋ฒคํธ, ์ด๊ธฐํํ ๋๋ reset ์ด๋ฒคํธ ๋ฐ์
- submit๊ณผ reset์ ์ด๋ฒคํธ ํธ๋ค๋ฌ์์ ์ทจ์ํ ์๋ ์์
์ด๋ฒคํธ | ์ค๋ช |
onsubmit | form์ด ์ ์ก๋ ๋ ๋ฐ์ |
onreset | ์ ๋ ฅ form์ด reset๋ ๋ ๋ฐ์ |
oninput | input ๋๋ textarea์ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋ ๋ฐ์ |
onchange | select box, check box, radio button์ ์ํ๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ๋ฐ์ |
onfocus(focusin) | input๊ณผ ๊ฐ์ ์์์ ์ ๋ ฅ ํฌ์ปค์ค๊ฐ ๋ค์ด์ฌ ๋ ๋ฐ์ |
onblur(focusout) | input๊ณผ ๊ฐ์ ์์ ๋ฑ์์ ํฌ์ปค์ค๊ฐ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ด๋ํ ๋ ๋ฐ์ |
onselect | input, textarea์ ์ ๋ ฅ ๊ฐ ์ค ์ผ๋ถ๊ฐ ๋ง์ฐ์ค ๋ฑ์ผ๋ก ์ ํ๋ ๋ ๋ฐ์ |
Form ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๊ตฌํ
1๏ธโฃ ์ธ๋ผ์ธ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฐฉ์
<form method="POST" action="ok.html" onsubmit="javascript:event.preventDefault();alert('์๋
');">
- ์์์ ๊ตฌํํ๋ ์์์ form ํ๊ทธ ์์์ onsubmit ์์ฑ์ ํ์ฉํ๋ค.
- onsubmit ์์ JavaScript๋ฅผ ์์ฑํด์ฃผ์๋ค.
๐ event.preventDefault()
submit๋๋ ์๊ฐ ํ์ด์ง๊ฐ ๋ฆฌ๋ก๋ ๋๋ ๊ฒ์ ๋ง๊ธฐ ์ํ ๋ฉ์๋!
2๏ธโฃ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ ๋ฐฉ์
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>ํ์๊ฐ์
</title>
</head>
<body>
<h1>ํ์๊ฐ์
</h1>
<form method="POST" action="ok.html" id="register">
<fieldset>
<legend>์ฌ์ฉ์ ์ ๋ณด</legend>
<label for="id" onsubmit="javascript:alert('id');">์์ด๋ </label>
<input type="text" placeholder="ํ์ ์
๋ ฅ" id="id" required/></br>
<label for="password">๋น๋ฐ๋ฒํธ </label>
<input type="password" placeholder="ํ์ ์
๋ ฅ" id="pass" required/></br>
<label>์ฑ๋ณ </label>
๋จ<input type="radio" name="sex"/>
์ฌ<input type="radio" name="sex"/></br>
<label>๊ด์ฌ๋ถ์ผ </label>
<input type="checkbox" name="sub"/>์ํ
<input type="checkbox" name="sub"/>์์
<input type="checkbox" name="sub"/>๋ฏธ์ </br>
<label>์ํ๋ฉ์์ง</label></br>
<textarea cols="30" rows="5"></textarea></br>
<input type="submit" value="๋ฑ๋ก">
<input type="reset" value="์ด๊ธฐํ">
</fieldset>
</form>
</body>
<script>
var f = document.getElementById("register")
f.onsubmit = function submitFunc() {
if(document.getElementById('id').value != "seolhee") {
alert("id๋ฅผ 'seolhee'๋ผ๊ณ ์
๋ ฅํด์ฃผ์ธ์.");
return false;
}
}
</script>
</html>
- form์ id๋ฅผ ์ง์ ํ๊ณ , HTML์์ id๊ฐ์ ํตํด ์ด๋ฒคํธ ๋์์ด ๋ DOM์ ์ ํํ๋ค.
- ํด๋น DOM์ ์ด๋ฒคํธ ํธ๋ค๋ฌ(submitFunc())๋ฅผ ๋ฑ๋กํ๊ณ , onsubmit์ด ๋ฐ์ํ๋ฉด ํจ์๊ฐ ์คํ๋๋๋ก ํ๋ค.
3๏ธโฃ addEventListener ๋ฉ์๋ ๋ฐฉ์
<script>
var f = document.getElementById("register")
function submitFunc1() {
if(document.getElementById('id').value != "seolhee") {
alert("id๋ฅผ 'seolhee'๋ผ๊ณ ์
๋ ฅํด์ฃผ์ธ์.");
return false;
}
}
function submitFunc2() {
if(document.getElementById('id').value != "seolhee") {
alert("id๋ฅผ 'seolhee2'๋ผ๊ณ ์
๋ ฅํด์ฃผ์ธ์.");
return false;
}
}
// document.addEventListener(์ด๋ฒคํธ, ๋ฉ์๋, ์บก์ณ๋ง ์ฌ๋ถ)
f.addEventListener("submit", submitFunc1, false); // ๋ง์ง๋ง ์ธ์๊ฐ ์๋ต ๊ฐ๋ฅ
f.addEventListener("submit", submitFunc2, false); // ๋ง์ง๋ง ์ธ์๊ฐ ์๋ต ๊ฐ๋ฅ
</script>
- ๋๋จธ์ง๋ ์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ ๋ฐฉ์๊ณผ ๊ฐ๊ณ , JavaScript ์ฝ๋ ๋ถ๋ถ๋ง ๋ณ๊ฒฝํ๋ค.
- addEventListener์ ํน์ฑ์ ๋ด๊ธฐ ์ํด ํ๋์ ์ด๋ฒคํธ์ ๋ ๊ฐ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์์ฑํ๋ค.
- id๋ฅผ ํตํด DOM์ ์ ํํ๊ณ , ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฉ์๋๋ฅผ ์์ฑํ์ฌ ํด๋น DOM์ ๊ฐ๊ฐ ์ถ๊ฐํ๋ค.
โ๏ธ ์ด๋ค ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น?
์ด๋ฒคํธ ํธ๋ค๋ฌ | ์ฅ์ | ๋จ์ |
์ธ๋ผ์ธ ์ด๋ฒคํธ ํธ๋ค๋ฌ | ์ฌ๋ฌ ๊ฐ์ ๋ฉ์๋ ํ ๋ฒ์ ํธ์ถ ๊ฐ๋ฅ | HTML ์ฝ๋๋ฅผ JavaScript๊ฐ ์นจ๋ฒ |
์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ | HTML ์ฝ๋์ JavaScript ์ฝ๋ ๋ถ๋ฆฌ ๊ฐ๋ฅ | ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ์ ํ๋์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ง์ ๋ฐ์ธ๋ฉํ ์ ์์ (๋ง์ง๋ง์ ๋ฐ์ธ๋ฉ๋ ๋ฉ์๋๋ง ์คํ๋จ) |
addEventListener | - addEventListener์ ์ธ์๋ฅผ ํตํด ์ข ๋ ์ธ๋ฐํ ์ด๋ฒคํธ ์ ์ด ๊ฐ๋ฅ - ํ๋์ ์ด๋ฒคํธ์ ๋ํด ํ๋ ์ด์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ถ๊ฐ ๊ฐ๋ฅ - ์บก์ณ๋ง๊ณผ ๋ฒ๋ธ๋ง ์ง์ - HTML ์์ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ DOM(HTML, XML, SVG)์ ๋ํด ๋์ํจ ๐ ์ฅ์ ๅค, ์ธ๋ผ์ธ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋กํผํฐ์ ๋จ์ ๊ทน๋ณต |
๐ addEventListener๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋ฆฌ
๐ ์ ๋ฆฌ
form ํ๊ทธ๋ ์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , ์๋ฒ๋ก ๋ณด๋ด์ฃผ๋ ์ญํ ์ ํ๋ค.
submit์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ , ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์์ฑํ์ฌ ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
์ด๋ฒคํธ ํธ๋ค๋ฌ๋ addEventListener๋ฅผ ํ์ฉํ์.
'1๏ธโฃ Web > ๊ธฐํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Web] Chrome Cross-Origin ์ ์ฑ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ iframe ํ์ฉ ๋ฐฉ์ (feat. PostMessage) (1) | 2023.10.14 |
---|---|
[Web] ElasticSearch nori & Bulk API ํ์ฉ (0) | 2023.04.02 |
[Web] ElasticSearch ์ ์ฉ ๋ฐฉ์ ํ์ (0) | 2023.04.02 |
[Web] Anchor (a ํ๊ทธ) (0) | 2022.09.18 |
[Web] input ํ๊ทธ์ id์ name ์ฐจ์ด์ (0) | 2022.09.18 |
๋๊ธ