2012-12-15 8 views
0

(특정 유형의) 이벤트가 발생했는지 어떻게 확인할 수 있습니까? 다음 코드로 작업해야한다고 가정합니다.자바 스크립트에서 이벤트 체크

<html> 

    <head> 
     <title>Events</title> 
     <script type="text/javascript"> 
      document.addEventListener('keydown', 

      function (event) { 
       if (event.keyCode == 13) { //ENTER key was pressed 
        alert("Hahaha!"); 

       } 

      }, false); 

      document.addEventListener('click', 

      function() { 
       alert("Ahahahah!"); 


      }, false) 
     </script> 
    </head> 

    <body></body> 

</html> 

"클릭 이벤트 후 Enter 키를 눌렀습니다!"라는 경고 상자가 필요하다고 가정합니다. ENTER를 누른 후 click 이벤트가 발생한 후 표시됩니다.

답변

2

와 예입니다. JavaScript는 기본적으로 이벤트 체인을 사용자가 원하는 순서대로 트리거 할 수 있기 때문에 설명하는 방식으로 이벤트 체인을 암기하지 않으므로 언어의 쓸모없는 기능이됩니다.

기본적으로 클릭 이벤트가 발생하면 해당 이벤트가 발생했음을 기록해야합니다. 기본 구현은 부울 플래그를 사용하는 것입니다.

var clickFired = false;// by default it is false. 
document.addEventListener('click', function(event) { 
    clickFired = true; 
}, false); 
document.addEventListener('keydown', function(event) { 
    if (clickFired) { 
     alert('key pressed after click'); 
    } else { 
     alert('key pressed before click'); 
    }; 
}; 

JavaScript는 이벤트에 대한 몇 가지 매우 구체적인 것을 기억합니다. 그것은 ctrlKeyaltKeyshiftKey 또는 metaKey 이벤트가 트리거 된 시간에 눌려되었는지 여부를 알고 버블 규칙, 트리거 실행 단계, 목표와 당신이 입력하여 볼 수있는 몇 가지 더 기억 :

var clickFired = false;// by default it is false. 
    document.addEventListener('click', function(event) { 
     console.dir(event);//Firebug command. 
     clickFired = true; 
    }, false); 

또한 을 조심하십시오. 크로스 브라우저 호환 이벤트 관리는 불행히도 전혀 달성하기 어렵지 않습니다. 다양한 브라우저가 매우 다른 방식으로 이벤트를 처리합니다. Internet Explorer는 addEventListener()이 아닌 attachEvent()을 사용합니다. ~

프로덕션 환경 용 코드를 작성하는 경우 일상적으로 사용하기 쉬운 라이브러리를 사용하는 것이 좋습니다. 그렇지 않으면 학습 목적으로 굉장한 휠을 다시 발명해야하지만 지루하고 시간이 많이 걸릴 수 있습니다. JavaScript에 대한 자신의 방법을 정말로 알지 못한다면, 원시 코드를 작성하는 것은 다른 사람들이 즉시 사용하기를 원하는 것에 적합하지 않습니다.

0

콜백 기능을 사용하는 것이 가장 쉽습니다. 여기에 대한 자세한 내용은 당신은 발생의 순서를 기록 할 필요가 here

function mySandwich(param1, param2, callback) { 
    alert('Started eating my sandwich.\n\nIt has: ' + param1 + ', ' + param2); 
    callback(); 
} 

mySandwich('ham', 'cheese', function() { 
    alert('Finished eating my sandwich.'); 
}); 
관련 문제