【发布时间】: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 中修复的,但如果不是,请告诉我 - 很好奇。