๐ก ์ฌ์ฉํ ํฐํธ๋ ๋ฅ๊ทผ๋ชจ๊ผด์ด๋ฉฐ, ์ ์ฒด์ ์ธ ๋์์ธ ์ปจ์ ์ ๋์์ด๋ ๊ธธํ์ง๋ ๋ธ๋ก๊ทธ์ ๋ฅ๊ทผ๋ชจ๊ผด ์๊ฐ ๊ฒ์๊ธ์์ ๋ฐ์๋ค. ํด๋น ๊ฒ์๊ธ์ ๋ฅ๊ทผ๋ชจ๊ผด ํฐํธ๋ฅผ Fixedsys ํฐํธ์ ๊ฒฐํฉํ๊ณ ๋ค๋ฌ์ด์ ํผ๋ธ๋ฆญ ๋๋ฉ์ธ ๋ผ์ด์ผ์ค๋ก ๋ฐฐํฌํ ํ์ด์ง์ด๋ค.
FormData
- FormData ๋ ๋ธ๋ผ์ฐ์ ์ ๋ด์ฅ๋ API๋ก HTML ํผ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ๊ณ ์ ์กํ ์ ์๋ ๊ฐ์ฒด์ด๋ค.
- new ํค์๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ๋๋ค. ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ ๋ new ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ํจ์๊ฐ ์์ฑ์๋ก ๋์ํ๋ฉฐ ์๋ก์ด ๋น ๊ฐ์ฒด๊ฐ ๋ฐํ๋๋ค. ์ด๋ ๊ฒ ์์ฑํ FormData ๊ฐ์ฒด์ ๋ค์ํ ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ํผ ๋ฐ์ดํฐ์ ๋ํ ์์
๋ค์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ex. ํผ ๋ฐ์ดํฐ ์์ง, ํ์ผ ์ ๋ก๋, AJAX ์์ฒญ ์ ๋ฐ์ดํฐ ์ ์ก ๋ฑ
<form>
<div class="form-control">
<label for="playername">ํ๋ ์ด์ด ์ด๋ฆ</label>
<input type="text" name="playername" id="playername" autocomplete="off" />
</div>
<div>
<button type="button" class="btn btn-alt" id="cancel-config-btn">์ทจ์</button>
<button type="submit" class="btn">ํ์ธ</button>
</div>
</form>
const formElement = document.querySelector('form');
formElement.addEventListener('submit', savePlayerConfig);
// form์ submitํ ๋์ ์ฝ๋ฐฑํจ์
function savePlayerConfig(e) {
e.preventDefault();
const formData = new FormData(e.target);
const enteredPlayername = formData.get('playername').trim();
console.log(enteredPlayername);
}
- ๋ฐ์ํ ์ด๋ฒคํธ ๊ฐ์ฒด์ ๋ค์ด์๋ target ์์ฑ์ FormData์ ๊ฐ์ผ๋ก ์ ๋ฌํ ์ ์๋ค.
- ํผ์ ์ ๋ฌํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ด ํผ์ ๋ถ์ํด์ name ์์ฑ์ด ํผ ๋ด์ ์์๋ฅผ ํ์ํ๋ค. name ์์ฑ์ ์์ฑ๊ฐ์ ์ฌ์ฉํ์ฌ FormData์ ๋ฐ์ดํฐ๋ฅผ ์๋ณํ ์ ์๋ค.
id ์์ฑ๊ณผ name ์์ฑ
id ์์ฑ
- HTML ๋ฌธ์ ๋ด์์ ๊ฐ ์์๋ค์ ๋ํ ๊ณ ์ ํ ์๋ณ์์ด๋ค. ๋์ผํ ๋ฌธ์ ๋ด์์ id๋ ์ค๋ณต๋ ์ ์๋ค.
- ์ฃผ๋ก css ์คํ์ผ๋ง์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ ์์๋ฅผ ์ ํํ๊ณ ์กฐ์ํ ๋ ์ฌ์ฉ๋๋ค.
<div id="uniqueId">This is a unique element.</div>
name ์์ฑ
- ํนํ ํผ ์์์์ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ฌ์ฉ๋๋ฉฐ, ์๋ฒ์์๋ ์ด name ์์ฑ๊ฐ์ ํตํด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๋ค.
- ํผ ์์์๋ ์ค๋ณต๋ ์ ์๋ค. ํ๋์ ํผ ์์์ ์ฌ๋ฌ ์์๊ฐ ๋์ผํ name์ ๊ฐ๊ณ ์์ ์ ์๋ค.
- ํผ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ ์กํ ๋, ํนํ ๋ผ๋์ค ๋ฒํผ์ด๋ ์ฒดํฌ๋ฐ์ค ๋ฑ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ธ ์์์์ ์ฌ์ฉ๋๋ค.
<input type="text" name="username">
<input type="radio" name="gender" value="male"> Male
<input type="radio" name="gender" value="female"> Female
submit ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๋ฐ์: data-*
- data-* ์ ์ญ ํน์ฑ์ ์ฌ์ฉ์ ์ง์ ๋ฐ์ดํฐ ํน์ฑ(custom data attributes)์ด๋ผ๋ ํน์ฑ ํด๋์ค๋ฅผ ํ์ฑํจ์ผ๋ก์จ ์์์ ๋ฐ์ดํฐ๋ฅผ ์คํฌ๋ฆฝํธ๋ก HTML๊ณผ DOM ์ฌ์ด์์ ๊ตํํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
- data-* ๋ก ์ค์ ํด ์ค ๋ฐ์ดํฐ๋ dataset ์์ฑ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
<button id="edit-player-1-btn" data-playerid="1">
ํ๋ ์ด์ด 1์ ์์ ๋ฒํผ
</button>
<button id="edit-player-2-btn" data-playerid="2">
ํ๋ ์ด์ด 2์ ์์ ๋ฒํผ
</button>
// ํ๋ ์ด์ด 1์ ์์ ๋ฒํผ
const editPlayer1BtnElement = document.getElementById('edit-player-1-btn');
// ํ๋ ์ด์ด 2์ ์์ ๋ฒํผ
const editPlayer2BtnElement = document.getElementById('edit-player-2-btn');
editPlayer1BtnElement.addEventListener('click', openPlayerConfig);
editPlayer2BtnElement.addEventListener('click', openPlayerConfig);
let editedPlayer = 0;
const players = [
{
name: '',
symbol: 'X',
},
{
name: '',
symbol: 'O',
},
];
function openPlayerConfig(e) {
editedPlayer = e.target.dataset.playerid; // dataset ์ฌ์ฉ
playerConfigOverlayElement.style.display = 'block';
backdropElement.style.display = 'block';
};
function savePlayerConfig(e) {
e.preventDefault();
const formData = new FormData(e.target);
const enteredPlayername = formData.get('playername').trim(); // ' ' => ''
if (!enteredPlayername) { // enteredPlayername === ''
e.target.firstElementChild.classList.add('error');
errorsOutputElement.textContent = '์ด๋ฆ์ ์
๋ ฅํด์ฃผ์ธ์!';
return; // return ๋ฐํ ์ ์๋์ ์ฝ๋๊ฐ ์คํ๋์ง ์๊ณ ์ฌ๊ธฐ์ ํจ์์ ์คํ์ด ์ค๋จ๋จ
}
const updatedPlayerDataElement = document.getElementById(`player-${editedPlayer}-data`)
updatedPlayerDataElement.children[1].textContent = enteredPlayername;
players[editedPlayer - 1].name = enteredPlayername;
closePlayerConfig();
}
- html ํ์ผ์์ ๊ฐ ๋ฒํผ์ data-playerid ๊ฐ์ ์ค์ ํ ๋ค ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ฒํผ์ ์ด๋ฒคํธ๋ฆฌ์ค๋ ์ฝ๋ฐฑํจ์์์ e.target.dataset์ผ๋ก playerid ๊ฐ์ ํ์ธํ ์ ์๋ค.
- e.target.dataset.playerid ๋๋ e.target.dataset['playerid']๋ก value๋ง ๊บผ๋ด์ ์ฌ์ฉํ ์๋ ์๋ค.
'โ๏ธ What I Learned' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] Dart์ ์ปดํ์ผ ๋ฐฉ์ (0) | 2024.01.17 |
---|---|
[TIL] ์น์ฌ์ดํธ์ ํธ์คํ ๊ณผ ๋ฐฐํฌ (0) | 2024.01.17 |