2010-02-13 29 views
2

我试图检测用户在xul文本框(Firefox扩展)中点击转义或输入时。但是下面的代码似乎不起作用。任何援助将不胜感激。XUL文本框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作为拍摄参数添加侦听器时。一般来说,你想在处理事件时处于冒泡阶段,而不是捕获阶段(即在你正在调用的元素的更具体的后代的侦听器被调用之后)。