javascript - Blazor Capture Android 键盘 Go 键

标签 javascript android blazor blazor-webassembly

我有一个 Blazor 应用程序,其中有一个用于搜索的文本字段Android 用户可以使用键盘输入搜索词,但是当他单击“Go”按钮(放大镜)时,没有任何反应。在 Google 中,当用户点击“Go”时,搜索就会开始。我希望我的 Blazor 应用程序具有相同的行为。

如何拦截并处理“Go”输入?

enter image description here

Razor :

<div id="search-field-container">
  <label id="searchLabel" for="searchWord" hidden="hidden">SearchPhrase</label>
  <input tabindex="@TabIndex" aria-labelledby="searchLabel" @bind="@SearchPhrase" class="topbar-search-input" id="searchWord" @oninput="@((e) => { SearchPhrase = (string)e.Value!; })" @onkeydown="@Enter" type="text" disabled="@VariablesService.IsSearchProcessActive">
  <button tabindex="@TabIndex" type="button" @onclick="BtnClick" id="search-button" aria-label="Suche" disabled="@VariablesService.IsSearchProcessActive">
    <i class="ri-search-line" style=""></i>
  </button>
</div>

C#:

    public partial class SearchFieldComponent
{
    [Parameter]
    public bool IsInsideSearchPage { get; set; }

    [Parameter]
    public string SearchPhrase { get; set; } = "";

    [Parameter] 
    public int TabIndex { get; set; } = 0;
    
    [Parameter]
    public EventCallback<string> CallPageForSearchResults { get; set; }

    protected override void OnInitialized()
    {
        PassSearchPhraseToPageIfExists();
        VariablesService.OnSearchPhraseChange += VariablesService_OnSearchPhraseChange;
        VariablesService.OnIsSearchProcessActiveChange += VariablesService_OnIsSearchProcessActiveChange;
    }

    protected override void OnParametersSet()
    {
        StateHasChanged();
    }

    private void VariablesService_OnIsSearchProcessActiveChange()
    {
        StateHasChanged();
    }

    private void VariablesService_OnSearchPhraseChange()
    {
        // leert die TopBar Sucheingabe, wenn auf der Suchseite ein anderes Wort gesucht wird
        if (IsInsideSearchPage) return;
        if (SearchPhrase.Equals(VariablesService.SearchPhrase)) return;
        SearchPhrase = "";
        StateHasChanged();
    }

    private async void PassSearchPhraseToPageIfExists()
    {
        if (!string.IsNullOrEmpty(SearchPhrase))
        {
            await CallPageForSearchResults.InvokeAsync(SearchPhrase);
        }
    }

    private void BtnClick()
    {
        Check();
    }

    private void Enter(KeyboardEventArgs e)
    {
        if (e.Code is "Enter" or "NumpadEnter")
        {
            Check();
        }
    }

    private void Check()
    {
        if (IsInsideSearchPage)
        {
            // Api-Call ans Backend mit Inhalt des Suchfeldes
            PassSearchPhraseToPageIfExists();
        }
        else
        {
            //Öffnen der Suchseite und Api-Call ans Backend mit Inhalt des Suchfeldes
            NavigationManager.NavigateTo("suche/", false);
        }

        VariablesService.SetSearchPhrase(SearchPhrase);
    }

    public void Dispose()
    {
        VariablesService.OnSearchPhraseChange -= VariablesService_OnSearchPhraseChange;
        VariablesService.OnIsSearchProcessActiveChange -= VariablesService_OnIsSearchProcessActiveChange;
    }
}

最佳答案

感谢@Marvin Klein,您建议的解决方案有效

if (e.Code == "Enter" || e.Key == "Enter")

关于javascript - Blazor Capture Android 键盘 Go 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75613770/

相关文章:

javascript - 这两个实现有什么不同

javascript - 页面滚动上的垂直滚动 div 页面分隔符,视差?

javascript - 如何一次将多个样式表和 Bootstrap 库导入到一个 HTML 文档中?

dll - 在浏览器中运行 C# dll 仅用于计算

javascript - 获取 JSON 对象中的数组并使用它来分配 div 的背景

android - 梯度错误:"that you have installed a JDK (not just a JRE) and configured your JAVA_HOME"

Android Baseadapter TextEdit 不工作

android - SOAP 和 RESTFUL 之间的主要区别以及哪个适合 Native 移动应用程序?

Blazor 可选路由参数

Blazor:组件记录列表无效