如何在Blazor中将焦点设置为文本框



如何在Blazor中将焦点设置为文本框?到目前为止,我们找到的唯一方法就是使用JavaScript。

.Net 5(或更高版本(让这一切变得简单!

<input type="text" @ref="myref"/>
@code {
private ElementReference myref;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await myref.FocusAsync();
}
}
}

如果你有一个像InputNumber这样的内置类型,并且你正在使用.Net6,你可以应用@Alexandre的解决方案,但有一些类似的更改:

<InputNumber @ref="MyRef" @bind-Value="MyValue" />
<button class="btn btn-primary" @onclick="MyClick"> Click me </button>
private InputNumber<int> MyRef;
private int MyValue {get; set;}
//Some click event
private void MyClick()
{
if(MyRef.Element.HasValue) 
{
MyRef.Element.Value.FocusAsync();
}
}

没有其他方法可以做到…您可以使用JSInterop来做到这一点,如下所示:

<input type="text" @ref="myref"/>
@code {
private ElementReference myref;
[Inject] IJSRuntime JSRuntime { get; set; }
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await 
JSRuntime.InvokeVoidAsync("exampleJsFunctions.focusElement", myref);
}
}
}

JavaScript

<script>
window.exampleJsFunctions =
{
focusElement: function (element) {
element.focus();
}
};
</script>

希望这能帮助。。。

这个演示通过点击按钮将焦点设置为文本框来显示这一点。

@page "/setfocus"
<input @ref="textInput" />
<button @onclick="() => 
textInput.FocusAsync()">Set
focus</button>
@code {
ElementReference textInput;
}

对于我们这些使用第三方控件的人,提供者应该有一个等效的元素引用,以使Alexandre的答案有效(DotNet5及以上(

<RadzenTextBox @ref="searchBox" Name="SearchPhrase" @bind-Value=@SearchString MaxLength="400" @oninput=@(args => OnChangedSearch(args.Value.ToString())) @onkeydown="@Enter" />

@code{   
RadzenTextBox searchBox;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await searchBox.Element.FocusAsync(); //NOTE: this is for Radzen "elements"
}
}
}

相关内容

  • 没有找到相关文章

最新更新