我希望能够知道在移动键盘上按下了哪个键,但 @onkeyup 仅在按下相当于 Enter 的移动设备时触发,其中 KeyboardEventArgs.Code 等于空字符串。我尝试查找有关 KeyboardEventArgs 的移动等效项的任何信息,甚至只是为什么在按下每个键时 @onkeyup 不会触发,尽管
onkeyup="this.value = this.value.toUpperCase()"
在每个击键上都工作得很好。老实说我很困惑。
有效的 HTML 代码:
<input @bind="StringInput" id="textInput" onkeyup="this.value = this.value.toUpperCase()" />
我尝试过的 Blazor 代码:
<input @bind="StringInput" id="textInput" @onkeyup="InputReceivedInput" />
@code {
private string StringInput = string.Empty;
private void InputReceivedInput(KeyboardEventArgs Args)
{
if (Args.Code == "Enter" || Args.Code == "NumpadEnter")
{
//call another function
}
else
{
StringInput = StringInput.ToUpper();
}
}
}
第二次尝试(仅更改了 HTML 部分):
<input @bind="StringInput" id="textInput" onkeyup="@InputReceivedInput" />
我测试了您提供的代码,
onkeyup
方法存在按下键盘后无法更新数据的问题。对于此问题,您可以在 GitHub issues 上报告。
此外,我还找到了另一种方法来实现这一点。通过使用
@bind:get
和 @bind:set
。您可以查看有关 ASP.NET Core Blazor 数据绑定的更多信息。
<input @bind:event="oninput" @bind:get="StringInput" @bind:set="OnInput" id="textInput" />
<p>
<code>StringInput</code>: @StringInput
</p>
<input @bind="StringInput" id="textInput" onkeyup="this.value = this.value.toUpperCase()" />
@code {
private string StringInput = string.Empty;
private void OnInput(string value)
{
var newValue = value ?? string.Empty;
StringInput = newValue.ToUpper();
}
}