JavaScript

이벤트 객체

ToKor 2020. 12. 15. 07:29

DOM의 모든 이벤트 정보는 event 객체에 저장됨

<div id="test"></div>

<script>
	var el = document.getElementById("test");
    el.addEventListener('click', function(e){
      console.log(e.type);    //  clcik
    }
</script>

e.currentTarget은 현재선택된 위치(이벤트 등록된 위치), e.target은 실제 클릭된 노드(어디서 클릭이 발생했는지)

<ul id="menu">
  <li><button id="file">File</button></li>
  <li><button id="edit">Edit</button></li>
  <li><button id="view">View</button></li>
</ul>

<script>
  document.getElementById("menu")
    .addEventListener("click", 
      function(e){console.log("menu", e.target)});  // <button id="file">File</button>
      
  document.getElementById("menu")
    .addEventListener("click", 
      function(e){console.log("menu", e.currentTarget)});  // <ul id="menu"><li>...</li>...</ul>
</script>

/* file을 클릭하면, target은 실제위치 리턴, currentTarget은 이벤트리스너 위치(this) 리턴 */

이벤트 위임: 부모 노드에 이벤트를 걸어서 관리: 각각마다 이벤트를 놓을 필요가 없다.

<ul id="menu">
  <li><button id="create">create</button></li>
  <li><button id="view">view</button></li>
  <li><button id="edit">edit</button></li>
</ul>

<script>
  document.getElementById("menu").addEventListener('click', function(e){
	switch(e.target.id){
    
  	case "create":
    	console.log("you clicked the create");
      break;
    case "view":
    	console.log("you clicked the view");
      break;
    case "edit":
    	console.log("you clicked the edit");
      break;
    default:
      console.log("nothing");
  }
});
</script>

이벤트 발생 타입에 따른 위임

<button id="bt">
  Click
</button>

<script>
  var el = document.getElementById("bt");
  var handler = function(e){
    switch(e.type){
      case "click":
        console.log("click");
        break;
      case "mouseover":
        console.log("mouseover");
        break;
      case "mouseout":
        console.log("mouseout");
        break;
      default:
    }
  }
  el.onclick = handler;
  el.onmouseover = handler;
  el.onmouseout = handler;
</script>

jQuery에서의 이벤트 위임

$(“#menu”).on(“click”, “li button”, function(){
  if(this.id === “file”) { … }
});

$(“#menu”).on(“click”, “#file”, function(){ // 파일 메뉴 동작 }
$(“#menu”).on(“click”, “#edit”, function(){ // 편집 메뉴 동작 }
$(“#menu”).on(“click”, “#view”, function(){ // 보기 메뉴 동작 }