Blazor,如何触发回车键事件来执行按钮功能?
Blazor, how can I trigger the enter key event to action a button function?
我正在尝试 Microsoft 的待办事项列表示例:https://docs.microsoft.com/en-us/aspnet/core/tutorials/build-a-blazor-app?view=aspnetcore-3.1
我想添加一个待办事项,而不是通过单击鼠标来按下按钮,我想按下回车键。我不喜欢在这个解决方案中使用 JS:
我尝试通过这行代码触发方法 private void Enter(KeyboardEventArgs e):
<button @onclick="AddTodo" @onkeypress="@(e=>Enter(e)" tabindex="0" >Add todo</button>
没用。
enter code here
<input placeholder="Something todo" @bind="newTodo" />
<button @onclick="AddTodo" @onkeypress="Enter" tabindex="0" >Add todo</button>
@code {
private IList<TodoItem> todos = new List<TodoItem>();
private string newTodo;
private void AddTodo()
{
if (!string.IsNullOrWhiteSpace(newTodo))
{
todos.Add(new TodoItem { Title = newTodo });
newTodo = string.Empty;
}
}
//private void Enter(KeyboardEventArgs e)
private void Enter()
{
//if (e.Key == "Enter")
{
if (!string.IsNullOrWhiteSpace(newTodo))
{
todos.Add(new TodoItem { Title = newTodo });
newTodo = string.Empty;
}
}
}
}
onkeypress
仅针对字符键触发。 onkeydown
将触发所有按下的键。我找到了所有关键事件之间差异的一些解释 here
用 onkeydown
试试看,它成功了:
<input type="text" @onkeydown="@Enter" />
在事件处理程序中,您必须执行此操作(注意我检查了 Enter
和 NumpadEnter
键):
public void Enter(KeyboardEventArgs e)
{
if (e.Code == "Enter" || e.Code == "NumpadEnter")
{
// ...
}
}
我们可以通过结合这两个事件来实现这一点
<input placeholder="Task Heading" @bind="title" id="todo" @bind:event="oninput" @onkeydown="@Enter1" />
public async Task Enter1(KeyboardEventArgs e)
{
if (e.Code == "Enter" || e.Code == "NumpadEnter")
{
await js.InvokeVoidAsync("foucusById", "desc");
}
}
如果您使用 HTML 表单,这很简单 - 无需查找按键,只需让浏览器完成工作即可:
<form @onsubmit=Enter>
<label for="todo">What to do?</label>
<input id="todo" placeholder="Something todo" @bind="newTodo" />
<button>Add todo</button>
</form>
<ul>
@foreach(var item in todos)
{
<li @key=item>@item.Title</li>
}
</ul>
@code {
private class TodoItem { public string Title { get; set; } }
private IList<TodoItem> todos = new List<TodoItem>();
private string newTodo;
private void Enter()
{
if (!string.IsNullOrWhiteSpace(newTodo))
{
todos.Add(new TodoItem { Title = newTodo });
newTodo = string.Empty;
}
}
}
如果您将 type="submit" 属性添加到您的按钮,浏览器就会执行此操作。
<button type="submit" @onclick="AddTodo" @onkeypress="Enter" tabindex="0" >Add todo</button>
我正在尝试 Microsoft 的待办事项列表示例:https://docs.microsoft.com/en-us/aspnet/core/tutorials/build-a-blazor-app?view=aspnetcore-3.1
我想添加一个待办事项,而不是通过单击鼠标来按下按钮,我想按下回车键。我不喜欢在这个解决方案中使用 JS:
<button @onclick="AddTodo" @onkeypress="@(e=>Enter(e)" tabindex="0" >Add todo</button>
没用。
enter code here
<input placeholder="Something todo" @bind="newTodo" />
<button @onclick="AddTodo" @onkeypress="Enter" tabindex="0" >Add todo</button>
@code {
private IList<TodoItem> todos = new List<TodoItem>();
private string newTodo;
private void AddTodo()
{
if (!string.IsNullOrWhiteSpace(newTodo))
{
todos.Add(new TodoItem { Title = newTodo });
newTodo = string.Empty;
}
}
//private void Enter(KeyboardEventArgs e)
private void Enter()
{
//if (e.Key == "Enter")
{
if (!string.IsNullOrWhiteSpace(newTodo))
{
todos.Add(new TodoItem { Title = newTodo });
newTodo = string.Empty;
}
}
}
}
onkeypress
仅针对字符键触发。 onkeydown
将触发所有按下的键。我找到了所有关键事件之间差异的一些解释 here
用 onkeydown
试试看,它成功了:
<input type="text" @onkeydown="@Enter" />
在事件处理程序中,您必须执行此操作(注意我检查了 Enter
和 NumpadEnter
键):
public void Enter(KeyboardEventArgs e)
{
if (e.Code == "Enter" || e.Code == "NumpadEnter")
{
// ...
}
}
我们可以通过结合这两个事件来实现这一点
<input placeholder="Task Heading" @bind="title" id="todo" @bind:event="oninput" @onkeydown="@Enter1" />
public async Task Enter1(KeyboardEventArgs e)
{
if (e.Code == "Enter" || e.Code == "NumpadEnter")
{
await js.InvokeVoidAsync("foucusById", "desc");
}
}
如果您使用 HTML 表单,这很简单 - 无需查找按键,只需让浏览器完成工作即可:
<form @onsubmit=Enter>
<label for="todo">What to do?</label>
<input id="todo" placeholder="Something todo" @bind="newTodo" />
<button>Add todo</button>
</form>
<ul>
@foreach(var item in todos)
{
<li @key=item>@item.Title</li>
}
</ul>
@code {
private class TodoItem { public string Title { get; set; } }
private IList<TodoItem> todos = new List<TodoItem>();
private string newTodo;
private void Enter()
{
if (!string.IsNullOrWhiteSpace(newTodo))
{
todos.Add(new TodoItem { Title = newTodo });
newTodo = string.Empty;
}
}
}
如果您将 type="submit" 属性添加到您的按钮,浏览器就会执行此操作。
<button type="submit" @onclick="AddTodo" @onkeypress="Enter" tabindex="0" >Add todo</button>