๐Ÿ“’JS/โšกver.1

Js์˜ ํ•ต์‹ฌ! : CRUD & event & DOM

4:Bee 2023. 5. 28. 18:13
728x90
 Link  
JavaScript CRUD Application - CRUD Operations With JavaScript
https://youtu.be/KiRKUTDYlG8

Event ๊ฐ์ฒด

event๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํด๋ฆญ๋ฒ„ํŠผ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์˜ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div id="student-list">
    <button class="student">Student 1</button>
    <button class="student">Student 2</button>
    <button class="student">Student 3</button>
  </div>
  <script src="test.js"></script>
</body>

</html>
//test.js
document.querySelector("#student-list").addEventListener("click", (e) => {
  if (e.target.classList.contains("student")) {
    console.log("ํ•™์ƒ ๋ฒ„ํŠผ ํด๋ฆญ");
  }
});

event๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฒคํŠธ ๊ฐ์ฒด๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋“ค์ด ์กด์žฌํ•œ๋‹ค.

์ด๋ฒคํŠธ ๊ฐ์ฒด(Event object)๋Š” JavaScript์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ด๋ฒคํŠธ์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํŠน๋ณ„ํ•œ ๊ฐ์ฒด์ด๋‹ค. ์ด๋ฒคํŠธ๋Š” ์›น ํŽ˜์ด์ง€์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ƒํ™ฉ(์˜ˆ: ํด๋ฆญ, ๋งˆ์šฐ์Šค ์›€์ง์ž„, ํ‚ค๋ณด๋“œ ์ž…๋ ฅ ๋“ฑ)์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ด๋ฒคํŠธ ๊ฐ์ฒด๋Š” ์ด๋Ÿฌํ•œ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋Š” addEventListener ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DOM ์š”์†Œ์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


DOM

DOM(Document Object Model)์€ ์›น ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ์™€ ์ฝ˜ํ…์ธ ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ์กฐ์ž‘ํ•˜๋Š” ๊ฐ์ฒด ๊ธฐ๋ฐ˜์˜ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. DOM์€ ๋ฌธ์„œ์˜ ๊ฐ ์š”์†Œ(Element), ์†์„ฑ(Attribute), ํ…์ŠคํŠธ ๋“ฑ์„ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋“ค์€ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋ฉฐ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ๊ฐ€์žฅ ์ƒ์œ„์—๋Š” document ๊ฐ์ฒด๊ฐ€ ์žˆ๊ณ , ์ด ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ฌธ์„œ ์ „์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. document ๊ฐ์ฒด๋ฅผ Js๋ฅผ ํ†ตํ•ด HTML ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์š”์†Œ๋ฅผ ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.


  • Create
document.querySelector("#student-form").addEventListener("submit", (e) => {
  e.preventDefault();

  //Get Form Values
  const firstName = document.querySelector("#firstName").value;
  const lastName = document.querySelector("#lastName").value;
  const rollNo = document.querySelector("#rollNo").value;

  //validate
  if (firstName == "" || lastName == "" || rollNo == "") {
    showAlert("Please fill in all fields", "danger");
  }
  else {
    if (selectedRow == null) {//?
      const list = document.querySelector("#student-list");
      const row = document.createElement("tr");//?
      // clearFields();
      row.innerHTML =
        `<td>${firstName}</td>
        <td>${lastName}</td>
        <td>${rollNo}</td>
        <td>
          <a href="#" class="btn btn-warning btn-sm edit">Edit</a>
          <a href="#" class="btn btn-danger btn-sm delete">Delete</a>
        </td>
      `;
      list.appendChild(row);
      selectedRow = null;
      showAlert("Student Added", "success")
    }
    else {
      selectedRow.children[0].textContent = firstName;
      selectedRow.children[1].textContent = lastName;
      selectedRow.children[2].textContent = rollNo;
      selectedRow = null;
      showAlert("Student Info Edited", "info");
    }

    clearFields();
  }
});
  • Update
document.querySelector("#student-list").addEventListener("click", (e) => {//parent searching
  // e.preventDefault();
  //document.querySelector("#student-list")์— ์žˆ๋Š” ๋ฒ„ํŠผ๋“ค์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ์‹์—๋Œ€ํ•œ ์ฝ”๋“œ...
  console.log("edit")
  target = e.target;
  if (target.classList.contains("edit")) {//child searching
    selectedRow = target.parentElement.parentElement;
    document.querySelector("#firstName").value = selectedRow.children[0].textContent;
    document.querySelector("#lastName").value = selectedRow.children[1].textContent;
    document.querySelector("#rollNo").value = selectedRow.children[2].textContent;

  }
});
  • Delete
document.querySelector("#student-list").addEventListener("click", (e) => {
  // e.preventDefault();
  target = e.target;
  if (target.classList.contains("delete")) {
    target.parentElement.parentElement.remove();//?
    showAlert("Student Data Deleted", "danger");//=>Bootstrap
    clearFields();
  }

});
728x90