Event
๊ฐ์
โ Event๋ ํ๋ก๊ทธ๋๋ฐํ๊ณ ์๋ ์์คํ
์์ ์ผ์ด๋๋ ์ฌ๊ฑด(action) ํน์ ๋ฐ์(occurence)์ธ๋ฐ, ์ฐ๋ฆฌ๊ฐ ์ํ๋ค๋ฉด ๊ทธ๊ฒ๋ค์ ์ด๋ ํ ๋ฐฉ์์ผ๋ก ์๋ตํ ์ ์๋๋ก ์์คํ
์ด ๋งํด์ฃผ๋ ๊ฒ
โ ex: ํด๋ฆฝ, ํค๋ณด๋ ํค ์
๋ ฅ, ๋ธ๋ผ์ฐ์ ๋ซ๊ธฐ, ๋ฐ์ดํฐ ์ ์ถ, ํ
์คํธ ๋ณต์ฌ ๋ฑ๋ฑ...
Event object
โ ๋คํธ์ํฌ ํ๋์ด๋ ์ฌ์ฉ์์์ ์ํธ์์ฉ ๊ฐ์ ์ฌ๊ฑด์ ๋ฐ์์ ์๋ฆฌ๊ธฐ ์ํ ์กด์ฌ
โ DOM ์์๋ Event๋ฅผ '์์ '
โ ๋ฐ์ Event '์ฒ๋ฆฌ'
- Event ์ฒ๋ฆฌ๋ ์ฃผ๋ก
addEventListner()
๋ผ๋ Event ์ฒ๋ฆฌ๊ธฐ๋ฅผ ๋ค์ํ html ์์์ '๋ถ์ฐฉ' ํด์ ์ฌ์ฉ
Event handler - addEventListner()
โ ๋์์ ํน์ event๊ฐ ๋ฐ์ํ๋ฉด, ํ ์ผ์ ๋ฑ๋กํ๋ค
EventTarget.addEventListner(type, listner)
โ ์ง์ ํ Event๊ฐ ๋์์ ์ ๋ฌ๋ ๋๋ง๋ค ํธ์ถํ ํจ์๋ฅผ ์ค์
โ Event๋ฅผ ์ง์ํ๋ ๋ชจ๋ ๊ฐ์ฒด(Element, Document, Window ๋ฑ)์ ๋์(EventTarget)์ผ๋ก ์ง์ ๊ฐ๋ฅ
โ type
- ๋ฐ์ํ Event ์ ํ์ ๋ํ๋ด๋ ๋์๋ฌธ์ ๊ตฌ๋ฌธ ๋ฌธ์์ด
input, click, submit...
โ listner
- ์ง์ ๋ ํ์ ์ Event๋ฅผ ์์ ํ ๊ฐ์ฒด
- JavaScript function ๊ฐ์ฒด(์ฝ๋ฐฑํจ์)์ด์ด์ผ ํ๋ค.
- ์ฝ๋ฐฑ ํจ์๋ ๋ฐ์ํ Event ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง Event ๊ฐ์ฒด๋ฅผ ์ ์ผํ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ค.
Event ์ค์ต
- ๋ฒํผ ์นด์ดํธ
<body>
<button id="btn">๋ฒํผ</button>
<p id="counter">0</p>
<script>
const btn = document.querySelector('#btn')
let countNum = 0
// ์ด๋ฒคํธ ํธ๋ค๋ฌ ์์ฑ
btn.addEventListener('click', function (event) {
// console.log(event)
const pTag = document.querySelector('#counter')
countNum += 1
pTag.innerText = countNum
})
</script>
</body>
- input ์ ๋ ฅ๊ฐ ์ค์๊ฐ์ผ๋ก ์ถ๋ ฅํ๊ธฐ
<body>
<input type="text" id="text-input" />
<p></p>
<script>
// 1. input ์ ํ
const inputTag = document.querySelector("#text-input");
// 2. ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ถ์ฐฉ
inputTag.addEventListener("input", function (event) {
const pTag = document.querySelector("p");
// ๋ชจ๋ ์ ๋ณด๋ event์ ์ ์ฅ! .target์ ํตํด ์ ๊ทผ
pTag.innerText = event.target.value;
});
</script>
</body>
- ์ ๋ ฅ๊ฐ ์ค์๊ฐ ์ถ๋ ฅ + button ํด๋ฆญ ์ ์ถ๋ ฅ
<body>
<h1></h1>
<button id="btn">ํด๋ฆญ</button>
<input type="text" />
<script>
const btn = document.querySelector("#btn");
// btn์ด ํด๋ฆญ ๋๋ฉด ํจ์ ์คํ
btn.addEventListener("click", function (event) {
// h1 ํ๊ทธ ์ ํ
const h1Tag = document.querySelector("h1");
// ํด๋์ค blue ํ ๊ธ
h1Tag.classList.toggle("blue");
});
// input
const inputTag = document.querySelector("input");
// input์ ๊ฐ์ด ์
๋ ฅ๋๋ฉด ํจ์ ์คํ
inputTag.addEventListener("input", function (event) {
// h1 ํ๊ทธ ์คํ
const h1Tag = document.querySelector("h1");
// input๊ฐ์ ํ๊ทธ์ ์ปจํ
์ธ ๋ก ์ฑ์ฐ๊ธฐ
h1Tag.innerText = event.target.value;
});
</script>
</body>
Event ์ทจ์
event.preventDefault()
โ ํ์ฌ Event์ ๊ธฐ๋ณธ ๋์ ์ค๋จ
โ HTML ์์์ ๊ธฐ๋ณธ ๋์์ ์๋ํ์ง ์๊ฒ ๋ง์
โ HTMl ์์์ ๊ธฐ๋ณธ ๋์ ์์
- a ํ๊ทธ: ํด๋ฆญ ์ ํน์ ์ฃผ์๋ก ์ด๋
- form ํ๊ทธ: form ๋ฐ์ดํฐ ์ ์ก
์ค์ต
- ๋ณต์ฌ ๋ฐฉ์ง
<body>
<div>
<h1>์ ๋ง ์ค์ํ ๋ด์ฉ</h1>
</div>
<script>
// ๋ณต์ฌ ๋ฐฉ์ง ์ฝ๋
const h1Tag = document.querySelector("h1");
h1Tag.addEventListener("copy", function (event) {
event.preventDefault();
// ๊ฒฝ๊ณ ๋ฌธ๊ตฌ ์ถ๋ ฅ
alert("๋ณต์ฌ ํ ์ ์์ต๋๋ค.");
});
</script>
</body>
Event ์ข ํฉ ์ค์ต
[์ฐธ๊ณ ] lodash ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โ ๋ชจ๋์ฑ, ์ฑ๋ฅ ๋ฐ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ JavaScript ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โ array, object ๋ฑ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ๋ ์ ์ฉํ๊ณ ๊ฐํธํ ์ ํธ๋ฆฌํฐ ํจ์ ์ ๊ณต
โ ex: reverse, sortBy, range, random...
์ค์ต ์งํ
- ๋ฒํผ ํด๋ฆญ ์ ๋๋ค ๋ก๋ ๋ฒํธ 6๊ฐ ์ถ๋ ฅ
<body>
<h1>๋ก๋ ์ถ์ฒ ๋ฒํธ</h1>
<button id="lotto-btn">ํ์ด ๋ฒํธ ๋ฐ๊ธฐ</button>
<div id="result"></div>
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
<script>
// ๋ฒํผ ์ ํํ๊ธฐ
const button = document.querySelector("#lotto-btn");
button.addEventListener("click", function () {
// ์ปจํ
์ด๋ ๋ง๋ค๊ธฐ
const ballContainer = document.createElement("div");
ballContainer.classList.add("ball-container");
// ๋๋ค ์ซ์ 6๊ฐ ๋ง๋ค๊ธฐ
// lodash ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด์ฉ
const numbers = _.sampleSize(_.range(1, 46), 6);
// ๊ณต ๋ง๋ค๊ธฐ
numbers.forEach((number) => {
const ball = document.createElement("div");
ball.classList.add("ball");
ball.innerText = number;
ball.style.backgroundColor = "crimson";
// ๊ณต์ ์ปจํ
์ด๋์ ์์์ผ๋ก ์ถ๊ฐ
ballContainer.appendChild(ball);
});
// ์ปจํ
์ด๋๋ฅผ ๊ฒฐ๊ณผ ์์ญ์ ์์์ผ๋ก ์ถ๊ฐ
const result = document.querySelector("#result");
result.appendChild(ballContainer);
});
</script>
</body>
- CREATE, READ ๊ธฐ๋ฅ์ด ์๋ todo app ๋ง๋ค๊ธฐ
<body>
<form action="#">
<input type="text" class="inputData" />
<input type="submit" value="Add" />
</form>
<ul></ul>
<script>
const formTag = document.querySelector("form");
const addTodo = function (event) {
// ์ ์ถ ์ ์ฃผ์ ์ด๋์ ๋ง๊ธฐ ์ํด ์ด๋ฒคํธ ์ทจ์
event.preventDefault();
// ์
๋ ฅ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
const inputTag = document.querySelector(".inputData");
const data = inputTag.value;
// .trim() ์์ชฝ ๊ณต๋ฐฑ ์ ๊ฑฐ -> ๊ณต๋ฐฑ์ ์ ๊ฑฐ ํ์ ๋ ๋ฌธ์๊ฐ์ด ์๋ค๋ฉด
if (data.trim()) {
const liTag = document.createElement("li");
liTag.innerText = data;
const ulTag = document.querySelector("ul");
ulTag.appendChild(liTag);
} else {
alert("ํ ์ผ์ ์
๋ ฅํ์ธ์");
}
event.target.reset();
};
formTag.addEventListener("submit", addTodo);
</script>
</body>
โ ์ฝ๋ฐฑ ํจ์๊ฐ ๊ธธ์ด์ง ๊ฒฝ์ฐ ์ดํ ์ ์ง๋ณด์๋ฅผ ์ํด ํจ์๋ฅผ ๋ฐ์ผ๋ก ๋นผ์ ํธ์ถํ ์ ์๋ค.
'โญ Personal_Study > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธฐ์ ๋น๋๊ธฐ (0) | 2022.11.04 |
---|---|
Callback & Promise (0) | 2022.11.04 |
JavaScript์์์ This (0) | 2022.11.03 |
JavaScript๋ฅผ ํ์ฉํ DOM ์กฐ์ ๊ธฐ์ด (0) | 2022.11.02 |
DOM (Document Object Model) (0) | 2022.11.01 |
๋๊ธ