[노란책] 13. 이벤트 (작성중)

13. 이벤트

이벤트 흐름

이벤트 핸들러

마크업에 엘리먼트 프로퍼티로 적용하기

<input id="nameInput" onchange="console.log(this.value)" />

크로스 브라우징 이벤트 핸들러

var EventUtil = {
  addHandler: function(element, type, handler) {
    if (element.addEventHandler) {
      element.addEventListener(type, handler, false);
    } else if (element.attachEvent) {
      element.attachEvent("on" + type, handler);
    } else {
      element["on" + type] = handler
    }
  },
  removeHandler: function(element, type, handler) {
    if (element.removeEventHandler) {
      element.removeEventHandler(type, handler, false); // addEventListener 설정할 때와 같은 함수 레퍼런스를 전달해주어야 함
    } else if (element.detachEvent) {
      element.detachEvent("on" + type, handler); // attachEvent 설정할 때와 같은 함수 레퍼런스를 전달해주어야 함
    } else {
      element["on" + type] = null
    }
  }
}
DOM 레벨2 IE8 이하 fallback DOM 레벨 0
2개 이상 이벤트를 추가할 수 있다 2개 이상 이벤트를 추가할 수 있다 1개만 추가할 수 있다
추가한 순서대로 실행된다 추가한 순서의 반대대로 실행된다 .
this는 엘리먼트 this는 window this는 엘리먼트
버블링(기본), 캡처링 버블링 버블링

이벤트 객체

DOM 이벤트 객체 IE 이벤트 객체
type type
이벤트 핸들러의 매개변수로 전달 window 객체의 프로퍼티*
target srcElement
stopPropagation() cancelBubble = true
preventDefault() returnValue = false

*: attachEvent로 등록한 경우 편의를 위해 매개변수로 전달됨, DOM 레벨0으로 전달한 경우 매개변수로 전달되지 않으면 window 객체의 event 값을 참조하면 됨

메모리와 성능

이벤트 위임

이벤트 핸들러 제거

이벤트 시뮬레이션