- 모든 이벤트 핸들러에는 Event Object가 넘겨져 들어온다.
- Event Object는 발생한 이벤트에 대한 추가 정보를 제공한다.
- 추가 정보는 이벤트의 종류에 따라 조금씩 차이가 있다.
Event Object Properties
event.type
click, keypress, focusevent.preventDefault();
브라우저상의 기본 동작들을 방지한다.event.stopPropagation();
Event의 흐름을 멈춘다. (capturing, bubbling을 막아준다)event.target
실제 Event가 발생한 Element.evnet.currentTarget
event handler가 등록된 Element.
1. event.preventDefault()
<div>
<input type="checkbox">
<label for="checkbox">select</label>
</div>
var div = document.querySelector('div');
var input = document.querySelector('input');
div.addEventListener('click', function(e) {
console.log('div event');
});
input.addEventListener('click', function(e) {
e.preventDefault(); // 체크박스가 체크 되지 않는다.
console.log('input event');
});
2. event.stopPropagation()
var first = document.querySelector('#first');
var second = document.querySelector('#second');
var third = document.querySelector('#third');
/* Event Capturing */
first.addEventListener('click', function (e) {
// e.stopPropagation();
console.log('Capturing:' + firstEl.id);
}, true);
second.addEventListener('click', function (e) {
// e.stopPropagation();
console.log('Capturing:' + secondEl.id);
}, true);
third.addEventListener('click', function (e) {
// e.stopPropagation();
console.log('Capturing:' + thirdEl.id);
}, true);
/* Event Bubbling */
firstEl.addEventListener('click', function (e) {
// e.stopPropagation();
console.log('Bubbling:' + firstEl.id);
});
secondEl.addEventListener('click', function (e) {
e.stopPropagation();
console.log('Bubbling:' + secondEl.id);
});
thirdEl.addEventListener('click', function (e) {
// e.stopPropagation();
console.log('Bubbling:' + thirdEl.id);
});
3. Event target vs currentTarget
<ul>
<li id='one'>1</li>
<li id='two'>2</li>
<li id='three'>3</li>
<li id='four'>4</li>
<li id='five'>5</li>
</ul>
var ul = document.querySelector('ul');
// event bubbing
ul.addEventListener('click', function(e) {
console.log('Target:' + e.target.id); // 클릭한 li
console.log('CurrentTarget:' + e.currentTarget.tagName); // ul
});