Blazor 将输入值绑定到 oninput 不适用于 onkeypress
Blazor binding input value to oninput not working with onkeypress
我正在使用 blazor 进行搜索。当我在输入中按下一个键时,它会检查它是否是回车键,如果是则启动搜索。但是,绑定变量(keywordValue)的值似乎在我连续两次输入之前不会更新。如果我第一次按下它,值不会更新。
<h1>Blogs</h1>
<fieldset>
<label>Keyword Search</label>
<input type="text" @bind="keywordValue" @bind:event="oninput" @onkeypress="KeywordEnterPressed"/>
<button type="submit" @onclick="SearchBlogs">Search</button>
</fieldset>
private string keywordValue { get; set; }
protected async void KeywordEnterPressed(KeyboardEventArgs eventArgs)
{
if (eventArgs.Key == "Enter")
{
await SearchBlogs();
}
}
例如:如果我在输入字段中键入 "test" 并按回车键,它会运行值为“”的 searchblogs()。当我再次按下回车键时,它会运行 searchblogs(),其值为 "test",就像它应该的那样。
你应该使用 Task 而不是 void
写入:protected async Task KeywordEnterPressed
而不是 protected async void KeywordEnterPressed
顺便说一句,按钮元素的类型应该是"button"而不是"submit"
这样做:<button type="button" @onclick="SearchBlogs">
而不是 <button type="submit" @onclick="SearchBlogs">
希望这对您有所帮助...
根据 Nick 的评论,这似乎是事件排序,当按键事件为 运行 时绑定不会发生。我在搜索之前向按键事件添加了一个 Task.Delay(100) ,以便有时间进行绑定,现在为我表现。不太好,因为 100 是完全任意的。
由于事件顺序,我通过使用“onkeyup”而不是“onkeypress”来实现它
我正在使用 blazor 进行搜索。当我在输入中按下一个键时,它会检查它是否是回车键,如果是则启动搜索。但是,绑定变量(keywordValue)的值似乎在我连续两次输入之前不会更新。如果我第一次按下它,值不会更新。
<h1>Blogs</h1>
<fieldset>
<label>Keyword Search</label>
<input type="text" @bind="keywordValue" @bind:event="oninput" @onkeypress="KeywordEnterPressed"/>
<button type="submit" @onclick="SearchBlogs">Search</button>
</fieldset>
private string keywordValue { get; set; }
protected async void KeywordEnterPressed(KeyboardEventArgs eventArgs)
{
if (eventArgs.Key == "Enter")
{
await SearchBlogs();
}
}
例如:如果我在输入字段中键入 "test" 并按回车键,它会运行值为“”的 searchblogs()。当我再次按下回车键时,它会运行 searchblogs(),其值为 "test",就像它应该的那样。
你应该使用 Task 而不是 void
写入:protected async Task KeywordEnterPressed
而不是 protected async void KeywordEnterPressed
顺便说一句,按钮元素的类型应该是"button"而不是"submit"
这样做:<button type="button" @onclick="SearchBlogs">
而不是 <button type="submit" @onclick="SearchBlogs">
希望这对您有所帮助...
根据 Nick 的评论,这似乎是事件排序,当按键事件为 运行 时绑定不会发生。我在搜索之前向按键事件添加了一个 Task.Delay(100) ,以便有时间进行绑定,现在为我表现。不太好,因为 100 是完全任意的。
由于事件顺序,我通过使用“onkeyup”而不是“onkeypress”来实现它