Dart中的跨浏览器键事件处理程序

时间:2012-10-30 15:10:24

标签: dart

我正在使用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中处理跨浏览器兼容的关键事件的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

根据您的问题,另一个答案,此source code和此bug(您应该加注星标),以下是我的建议:

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

已更新:这是fixed

答案 1 :(得分:0)

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

顺便说一句,您可以使用KeyName.SPACEBAR

代替“U + 0020”