【问题标题】:Blazor multiple keys handling bugBlazor 多键处理错误
【发布时间】:2020-02-01 21:36:28
【问题描述】:

为了控制对象和相机,我构建了一个处理关键事件的 blazor 页面。 “W”、“A”、“S”、“D”键控制移动,而光标键控制固定在对象上的相机。 为了处理所有常见的情况,我必须绑定到 keydown 和 keyup 事件。然而,这并没有按预期工作。

当按下“W”(并按住它)然后按下“S”(并按住它),然后释放“W”,onkeyup 被触发但报告错误的键“S”。 同样的过程就像光标键的魅力一样。

这个问题很容易重现:

<input type="text" @onkeyup="HandleKeyUp" />

@code
{
    private void HandleKeyUp(KeyboardEventArgs evArgs)
    {
        Console.WriteLine("Keyup:" + evArgs.Key.ToLower());
    }
}

我正在使用 .NET Core 3.0 服务器端 blazor 和 Microsoft Edge 来显示页面。我意识到,当使用 Firefox 时,键会按预期报告。另一方面,Edge 在使用 JavaScript 时会正确报告按键错误。所以我想这是一个 Blazor 错误。

我想知道这是否是一个已知的错误(我找不到任何关于它的信息)或者除了更改网络浏览器之外我可以如何解决这个问题。

编辑: 我尝试将项目升级到 .NET Core 3.1:同样的问题。我用 .NET Core 3.1 创建了一个全新的项目:同样的问题。 这是简化复制的临时链接:https://1drv.ms/u/s!AkDtbKuES9_qjcZHghNBCc93jp4NBA?e=QiQXDh
它基本上是一个精简的新标准 blazor 项目。 Edge 版本为 44.18362.449.0。

【问题讨论】:

  • 我在 Chrome 79、Firefox 71.0 和 Edge 44.18362.449.0 上完全测试了您的代码,但无法重现您的问题。我正在使用.Net CORE 3.1。您使用的是什么版本的 firefox 和 .net core?如果您使用的是 .core 3.0,不妨尝试升级到 3.1
  • 为了确保我理解您的问题,我按住 D,然后按下并释放 E,在所有三个浏览器上,我的 evArgs.Key 都是 E 而不是 D。跨度>
  • 重读您的问题后,我也尝试按住 D,然后按住 E,在两者仍然按住的同时释放第一个键 (D),我正确地得到了 D 报告所有三个浏览器也是如此。如果您使用的是同一更新版本的浏览器并使用 .net core 3.1,您可以尝试制作一个完整的最小可复制示例来发布吗?也可能值得打开 github 票。
  • @Kyle:感谢您的测试!我说我使用的是 .NET Core 3.0。但幸运的是,我并没有固定在这个版本上。明天我将尝试使用 3.1。
  • Opps,很抱歉我显然错过了。我猜它是在 3.1 中修复的,但如果不是,请告诉我 - 很好奇。

标签: c# blazor


【解决方案1】:

该问题似乎与 Edge 浏览器错误有关。即使尝试使用简单的 JavaScript 处理,例如在此站点上https://javascript.info/keyboard-events 可以复制该问题(除了我之前报告的)。如前所述,其他浏览器工作正常。

自 2017 年以来,还有各种其他线程报告了 Edge 的键盘处理问题。

编辑:使用 Edge 79.0.309.71,问题就解决了。

【讨论】:

    猜你喜欢
    • 2022-06-17
    • 2020-08-23
    • 2021-12-07
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 2014-10-09
    相关资源
    最近更新 更多