2010-02-13 4 views
2

xul 텍스트 상자 (firefox 확장자)에 사용자가 이스케이프하거나 입력 할 때를 감지하려고합니다. 그러나 다음 코드는 제대로 작동하지 않습니다. 어떤 도움이라도 대단히 감사 할 것입니다.XUL textbox addEventListener

const KEY_ENTER = 13; 
const KEY_ESCAPE = 27; 

function keyPressed(e) { 
    switch (e.keyCode) { 
     case KEY_ENTER: 
      // do something 
      break; 
     case KEY_ESCAPE: 
      // do something 
      break; 
    } 
} 

var textbox = document.getElementById("mytextbox"); 
textbox.addEventListener('keypress', keyPressed, true); 

답변

3

텍스트 상자를 문서에 삽입하기 전에이 스크립트를 실행하고 있습니까? 이 예는 나를 위해 잘 작동 :

<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 
<script type="application/javascript"><![CDATA[ 
window.addEventListener("load", function() { 
    const KEY_ENTER = 13; 
    const KEY_ESCAPE = 27; 

    function keyPressed(e) { 
    switch (e.keyCode) { 
     case KEY_ENTER: 
      alert('enter'); 
      break; 
     case KEY_ESCAPE: 
      alert('escape'); 
      break; 
     default: 
      alert('default'); 
      break; 
    } 
    } 

    var textbox = document.getElementById("mytextbox"); 
    textbox.addEventListener('keypress', keyPressed, true); 
    alert('there'); 
}, false); 
]]></script> 
<textbox id="mytextbox" value="stuff"></textbox> 
</window> 

리스너를 추가 할 때 캡처 인수로 true을 전달하는 이유도 좀 궁금합니다. 일반적으로 캡처 단계가 아닌 이벤트를 처리 할 때 버블 링 단계에서 항목을 수행하려고합니다 (즉, 청취중인 요소의 특정 하위 항목에있는 청취자가 호출 된 후).