버튼이 클릭 되는 이벤트가 발생시, 이에 대한 target 정보를 이벤트 리스너는 가지고 있다.
즉, 이벤트리스너는 어떤 버튼이 click 되었는지 target을 가진다.
target 은 클릭된 Element를 가르킨다.
eventListener 함수의 event 인자를 활용한다.
todo list 를 만들기 위해 form 안의 input 에 입력을 하면
내용을 담을 span 과 삭제를 위한 button 을 만들어 HTML 에 삽입한다.
그리고 button은 이벤트리스너와 연결되어 해당 클릭시 해당 li를 삭제해 주어야만 한다.
하지만 여러개의 todo(HTML 상 li 태그) 가 생성되면 버튼들간 동일한 이벤트리스너를 호출해 줌으로 어떻게 해당되는 버튼이 있는 li를 찾아서 삭제시켜줄 수 있는지의 문제가 남는다.
함수가 실행될때의 정보를 담은 인자를 활용하자.
event
console.log(event) 를 통해 함수가 실행됐을때의 다양한 정보를 받아올 수 있었다.
event의 내부를 살펴보면 target : button 이 있고 그 안에는 parentNode : li 본인의 부모태그에 대한 정보 또한 담겨 있다.( 누가 저 button 의 부모인지)
const todoForm = document.querySelector("#todo-form");
const toDoInput = todoForm.querySelector("#todo-form input");
const todoList = document.querySelector("#todo-list");
const todoStorage = [];
function deleteToDo(event) {
console.log(event);
}
function paintToDo(newTodo) {
const li = document.createElement("li");
const span = document.createElement("span");
span.innerText = newTodo;
const button = document.createElement("button");
li.appendChild(span);
li.appendChild(button);
button.addEventListener("click", deleteToDo);
button.innerText = "X?";
todoList.appendChild(li);
}
function handleSubmit(event) {
event.preventDefault();
const newTodo = toDoInput.value;
toDoInput.value = "";
paintToDo(newTodo);
}
todoForm.addEventListener("submit", handleSubmit);
console.dir(event.target.parentNode.innerText);
각각의 text 가 출력됨을 확인할 수 있다.
console.dir(event.target.parentNode);
를 입력하면 해당 되는 li 태그들을 가져올 수 있다.
remove() 함수로 제거해 주면 끝이다.
function deleteToDo(event) {
const li = event.target.parentNode;
li.remove();
}
결과
'JavaScript' 카테고리의 다른 글
[JavaScript] const로 선언한 배열 push pop 이 가능한 이유는? (0) | 2022.03.02 |
---|---|
[JavaScript] Object, Array 등 무엇이든 String으로 변환시켜주는JSON.stringify(Object) (0) | 2022.03.02 |
[JavaScript] JS 에서 HTML을 생성해서 HTML 에 추가해주기 -document.createElement() (0) | 2022.03.02 |
[JavaScript] div 태그 안의 여러개의 span 선택하기 (0) | 2022.03.02 |
[JavaScript] 난수 생성 : Math. random() round(), ceil(), floor() (0) | 2022.03.02 |