2

我正在使用 M1 版本并编写了一个如下所示的密钥处理程序:

void _onKeyPress(KeyboardEvent e) {
  switch (e.keyIdentifier) {
    case KeyName.UP:
    case KeyName.LEFT:
      e.preventDefault();
      prev();
      break;

    case "U+0020": // FIXME Must be a better way, or?
    case KeyName.DOWN:
    case KeyName.RIGHT:
      e.preventDefault();
      next();
      break;
  }
}

它在 Chrome 中运行良好,但在 FF 或 IE 中不行。必须有更好的方法来处理空格键并仍然将其保留在一个开关中,对吗?我知道我可以查看其他字段以获得空间,但这也不是一个好的选择(从那时起我会将代码分成两个 switch 语句。)无论如何,它在 FF 和 IE 中不起作用的问题更糟. 如果我改写keyCode改用它,它在所有浏览器上都可以正常工作。

void _onKeyPress(KeyboardEvent e) {
  switch (e.keyCode) {
    case 38:
    case 37:
      e.preventDefault();
      prev();
      break;

    case 32:
    case 40:
    case 39:
      e.preventDefault();
      next();
      break;
  }
}

我的问题是我找不到虚拟键码的常量。难道我做错了什么?在 Dart 中处理跨浏览器兼容的关键事件的最佳方法是什么?

4

2 回答 2

1

根据您的问题、其他答案、此源代码和此错误(您应该加注星标),以下是我的建议:

  • 使用键码。
  • 如果需要,不要害怕使用 if/else if 而不是 switch 语句。JavaScript 无论如何都没有优化的 switch 语句。
  • 修复此错误之前,您可能应该只创建自己的常量。

更新:这已得到修复

于 2012-10-30T22:28:25.857 回答
0

我认为这是与此问题类似的问题。显然,KeyIdentifier 在 Firefox 上返回 null。

顺便说一句,您可以使用KeyName.SPACEBAR而不是 "U+0020"

于 2012-10-30T19:10:41.190 回答