javascript - XUL 文本框 addEventListener

标签 javascript firefox xul

我试图检测用户何时在 xul 文本框(firefox 扩展)中按下 escape 或 Enter。但下面的代码似乎不起作用。任何帮助将不胜感激。

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

最佳答案

您是否在文本框插入文档之前运行此脚本?这个例子对我来说效果很好:

<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 作为捕获参数。通常,您希望在处理事件时在冒泡阶段执行操作,而不是在捕获阶段(即在调用您正在监听的元素的更具体后代上的监听器之后)。

关于javascript - XUL 文本框 addEventListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2256513/

相关文章:

css - 工具栏在 Linux Firefox 中超出页面,而不是在 Windows 上

javascript - 使用 Components.utils.import 是 Firefox 1.5 中的语法错误

javascript - socket.io 和异步事件

javascript - Webpack 3 无法解析 SASS 文件中的 Assets

javascript - 确认框不显示并自动删除

javascript - 火狐扩展 : Stopping the page load when suspicious url found

javascript - preventDefault 会阻止 Mac 上 Firefox 中的右键单击菜单,但不会阻止 Windows

firefox - 我的 Firefox 扩展中可以有一个没有阴影的 XUL 面板吗?

javascript - 新手在 Firefox 扩展 (XUL) 的 Javascript 中停留在基本事件监听器上

javascript - 使用 css 部分删除超链接