【问题标题】:Blazor key press event and KeyCodesBlazor 按键事件和 KeyCodes
【发布时间】:2021-12-13 03:53:15
【问题描述】:

我正在 Razor 控件库中创建一个控件。我试图只允许在文本框中允许按下几个按键。它们是:

  1. 任何大于 0 的数字。这包括小数
  2. 字母“N”或“n”
  3. 允许用户复制/粘贴(control+c 和 control+v)。
  4. 允许使用箭头键和 Tab 键

我可以在 Javascript 中使用 Keycode 轻松完成此操作。在 JS 中,我会这样做:

keyPress: function (e) {
        var datatype = e.currentTarget.getAttribute("data-type");
        settings.valueChange.call();
        //add 110, 190 for decimal          
        if ($.inArray(e.keyCode, [46, 8, 9, 27, 13]) !== -1 ||
            // Allow: Ctrl+A,Ctrl+C,Ctrl+V, Command+A
            ((e.keyCode == 65 || e.keyCode == 86 || e.keyCode == 67) && (e.ctrlKey === true || e.metaKey === true)) ||
            // Allow: home, end, left, right, down, up
            (e.keyCode >= 35 && e.keyCode <= 40)) {
            // let it happen, don't do anything
            if (e.keyCode == 86) {
                //PASTE                
            }
            return;
        }
        if (e.keyCode === 78) {
            e.preventDefault();               
            //its an N, do some stuff
        } else if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
            e.preventDefault();
        }
    }

但是,我将如何在 Blazor/Razor 中执行此操作? KeyboardEventArgs 似乎没有提供 KeyCode。我可以使用 jsInterop 来调用我的 JS 函数,但是,KeyboardEventArgs 没有提供 JS KeyCode。如何在 Blazor 中完成此操作或获取数字 KeyCode,以便将其传递给我的 JS 函数?

【问题讨论】:

    标签: asp.net razor blazor razor-2


    【解决方案1】:

    您可以使用更多 Blazor 方式来执行此操作,并在每次更改文本时检查字符串。

    @using System.Text.RegularExpressions;
    <input @bind-value="@InputValue" @bind-value:event="oninput"/>
    <h4>@InputValue </h4>
    
    @code {
        private string _inputVal = "";
        public string InputValue {
            get => _inputVal;
            set { 
            if((double.TryParse(value,out double d) && d>0)//is the number like 1.23
              || value.ToLower()=="n" || value=="" )//or is N,n or empty str
                _inputVal = value;
            }
            }
    }
    

    粘贴和箭头键按预期工作。

    【讨论】:

    • 谢谢,这让我到了那里。有没有办法限制一个时期?我想做的是让某人输入任何数字(大于 0),包括十进制数字。或者,他们可以输入字母“N”(表示 N/A)
    • 哦,现在我明白了。查看更新的答案!
    • 我没有意识到你可以像你那样使用@bind-value:event="oninput"。这在其他领域很有帮助。 +1
    猜你喜欢
    • 2020-08-04
    • 1970-01-01
    • 2014-02-07
    • 2013-09-07
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-25
    相关资源
    最近更新 更多