2010-02-13 6 views
2

J'essaie de détecter quand un utilisateur clique sur escape ou entre dans une zone de texte xul (extension firefox). Mais le code suivant ne semble pas fonctionner. Toute aide serait grandement appréciée.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); 

Répondre

3

Exécutez-vous ce script avant l'insertion de la zone de texte dans le document? Cet exemple fonctionne très bien pour moi:

<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> 

Je suis aussi un peu curieux de savoir pourquoi vous passez true comme argument de capture lors de l'ajout de l'auditeur. Généralement, vous voulez faire des choses dans la phase de bouillonnement lors de la gestion des événements, pas la phase de capture (c'est-à-dire après que les écouteurs sur des descendants plus spécifiques de l'élément où vous écoutez ont été appelés).