이벤트 객체 : 'handleClick'이라는 이벤트핸들러를 'btn2'의 'click' 이벤트에 등록함 이때 시스템에서 'click' 이벤트가 발생하면 '이벤트객체'라는 것을 'handleClick'에 전달해 줌. 그리고 그것을 이벤트 핸들러가 받아서 사용하려면 매개변수가 있어야 함. 이벤트 핸들러를 전달하는 매개변수는 주로 'event', 'e'라고 씀.
constbtn1 = document.getElementById("one")
constbtn2 = document.getElementById("two")
constbtn3 = document.getElementById("three")
consthandleClick = function(event){
console.log(event)
}
btn2.addEventListener('click', handleClick)
이벤트 타겟(event.target)
constbtn1 = document.getElementById("one")
constbtn2 = document.getElementById("two")
constbtn3 = document.getElementById("three")
consthandleClick = function(event){
console.log(event.target)
}
// 지금 이벤트가 발생할 순간에 타겟을 알려줌 -> 결과는 다름
btn1.addEventListener('click', handleClick)
btn2.addEventListener('click', handleClick)
btn3.addEventListener('click', handleClick)
createElement & appendChild
document.createElement
document의 createElement 메소드는 지정된 이름의 HTML 요소를 만들어 반환해 준다.
지정된 이름 : 인자로 전달된 이름
문자열 형태로 이름을 전달해주면 됨.
document.creatElement('div) : div 요소를 만들어 반환해주는 메소드 호출문
document.createElement('p') : p요소를 만들어 반환해주는 메소드 호출문
document.createElement('a') : a요소를 만들어 반환해주는 메소드 호출문
HTML 요소가 만들어지고 또 반환되었다고 해서, 해당 요소가 곧장 웹브라우저 화면에 추가되는 것은 아니다.
메소드 통해 만든 요소를 DOM에 추가해야만 브라우저에 렌더링 되는 것을 볼 수 있음.
appendChild 메소드는 DOM 내 개별 요소 ('노드'라고도 함)에 자식 요소를 추가할 때 사용하는 메소드
기본 사용법
target.appendChild(자식으로_추가할_요소)
→ 타겟 요소 안에 새롭게 자식요소가 추가되어서 브라우저 화면상에도 그 결과가 반영됨.
예제
const p = document.createElement("p")
document.body.appendChild(p)
→createElement를 이용해서 p요소를 생성하고, 이를 문서의 body 태그 안에 자식으로 추가하겠다는 코드임.
appendChild vs append
appendChild 메소드와 append 메소드는 비슷한 역할을 함.
타겟 요소에 자식 요소를 추가한다는 점에서 같으나, 차이점도 존재함.
주요한 차이
- appendChild의 경우 추가한 자식 노드를 반환하지만, append는 반환 데이터가 없음.
- append를 이용하면 요소에 노드 객체 또는 문자열을 자식 요소로 추가할 수 있지만, appendChild는 노드 객체만을 추가할 수 있음.
상황에 맞게 선택하면 됨.
<!DOCTYPEhtml>
<html>
<head>
<metacharset="UTF-8">
<title>자바스크립트 실습해보자</title>
</head>
<body>
<buttonid="push">눌러</button>
<divid="area"></div>
<scriptsrc="script.js"></script>
</body>
</html>
constbutton = document.getElementById("push")
constdiv = document.getElementById("area")
button.addEventListener('click', function(){
console.log("div 생성 중!")
document.createElement("div")
})
/*
이때 버튼을 누르면 div가 생성일 될 뿐
실제 렌더링되는 DOM 안에는 생성되지 않음
-> 만든 div를 DOM에 추가해주는 작업까지 해야됨.
*/
'눌러'라는 버튼을 눌러도 elements를 보면 div가 표시되지 않는 걸 알 수 있음.
area안에 새롭게 만든 div를 append하는 작업이 필요해서 코드를 추가함.
constbutton = document.getElementById("push")
constdiv = document.getElementById("area")
button.addEventListener('click', function(){
console.log("div 생성 중!")
// 새로 만든 div 추가
constnewDiv = document.createElement("div")
div.appendChild(newDiv)
})
버튼을 누를 때마다 div가 생성되는 것을 확인할 수 있음.
createElement는 요소를 생성하지만, 요소를 실제 DOM에 추가해주지 않음.
→ 따로 append나 appendchild를 해줘야 됨.
constbutton = document.getElementById("push")
constdiv = document.getElementById("area")
button.addEventListener('click', function(){
console.log("div 생성 중!")
constnewDiv = document.createElement("div")
/*
만들어진 것에 대한 속성을 조작하는 작업
여기서는 style 속성을 조작함.
*/
newDiv.style.backgroundColor = "red" // '-'기호는 빼기
newDiv.style.width = "200px"
newDiv.style.height = "200px"
div.appendChild(newDiv)
})
constbutton = document.getElementById("push")
constdiv = document.getElementById("area")
button.addEventListener('click', function(){
console.log("div 생성 중!")
constnewDiv = document.createElement("div")
/*
만들어진 것에 대한 속성을 조작하는 작업
여기서는 style 속성을 조작함.
*/
newDiv.style.backgroundColor = "red"
newDiv.style.width = "200px"
newDiv.style.height = "200px"
div.append("벚꽃핀다")
})
append나 appendchild나 요소를 추가함.
append는 문자열에 대한 추가가 가능함.
appendchild는 오브젝트(DOM요소, 노드)만 넣을 수 있음.
반환값의 여부
append는 반환 O, appendChild는 반환 X
value 속성 외
입력 요소 값 읽기
<input>,<select>처럼 사용자로부터 입력을 받는데 사용되는 요소들이 있음.
여기에서 사용자가 입력한 값을 읽어들일 때는 요소의 value 속성에 접근하자.
차이를 기억하자
• 요소의 텍스트에 접근하고 싶다 : textContent 또는 innerText
• 사용자가 요소에 입력한 값에 접근하고 싶다 : value
입력 요소의 value에 접근하여 할 수 있는 일 : 읽기, 쓰기
// 대상 요소의 사용자 입력값을 읽어 콘솔에 출력하자!
console.log(target.value)
// 대상 요소의 사용자 입력값을 "변경값"으로 바꾸자!
target.value = "변경값"
여러 입력 요소를 포함할 수 있는 폼 요소로부터 여러 입력 값을 읽을 수 있음.
<form>
<input name="nickname" placeholder="닉네임" />
<input name="character" placeholder="특징" />
<input type="submit" value="입력 완료" />
</form>
form에서 이벤트를 제출하는 작업 후 submit 이벤트 발생하면 입력 값을 읽는다.
form은 action에 지정한 url로 입력값을 제출한다.
<form action="없는데요">
<input name="nickname" placeholder="닉네임" />
<input name="character" placeholder="특징" />
<input type="submit" value="입력 완료" />
</form>
만일 action 속성이 지정되지 않은 상태에서 url을 제출하게 되면, 그때는 페이지가 새로고침 되어버리는 현상이 나옴.