【问题标题】:convert JQuery into addEventListener for keypress event将 JQuery 转换为 addEventListener 用于按键事件
【发布时间】:2020-09-09 01:54:31
【问题描述】:

我需要创建一个只接受数字的输入。为此,我创建了一个文本类型的输入,并且只接受 5 位长度。

<input id="inputNumber" type="text" maxlength="5">

为了只接受数字,我创建了如下的 jquery 代码。

$("#inputNumber").keypress(function (value) {
// If the letter is not digit then display error and don't type anything
if (value.which != 8 && value.which != 0 && (value.which < 48 || value.which > 57)) {
return false;
}
else {
return true;
}
});

我尝试将其转换为我的 Type 脚本文件的 AddEventListner 但失败了。我什至尝试了下面的方法,但又失败了。我该如何解决这个问题。

参考:keypress event doesn't log input value first time event is fired

【问题讨论】:

    标签: javascript jquery typescript visual-studio asp.net-core


    【解决方案1】:

    请尝试下面的keydown事件并根据keycode阻止字符?

    window.addEventListener('DOMContentLoaded', (event) => {
    	    var inputNumber = document.getElementById('inputNumber');
    		inputNumber.addEventListener('keydown', function(event) {
                            if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode ==  13 || event.keyCode == 190 || event.keyCode == 110 || (event.keyCode == 65 && event.ctrlKey === true) || (event.keyCode >= 35 && event.keyCode <= 39) || event.keyCode == 189) {
                                return
                            } else {
                                if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
                                    event.preventDefault()
                                }
                            }
        })
    });
    &lt;input id="inputNumber" type="text" maxlength="5"/&gt;

    【讨论】:

    • 感谢您的回复,但我需要 addEventListener('DOMContentLoaded', .........) 以实现上述功能
    • @AbhiSingh 请检查使用 addEventlister 的更新代码
    【解决方案2】:

    如果您正在寻找可能看起来像这样的 js 等效代码:

    const inputNumber = document.querySelector("#inputNumber");
    
    inputNumber.addEventListener("keypress", (event) => {
    
      if (isNaN(event.key)) {
        event.preventDefault();
        return false;
      } else {
        return true;
      }
    });
    &lt;input id="inputNumber" type="text" maxlength="5"&gt;

    我需要创建一个只接受数字的输入。

    您可以改用input type="number" 或将验证简化为!isNaN(event.key)

    const inputNumber = document.querySelector("#inputNumber") as HTMLInputElement;
    
    inputNumber.addEventListener("keydown", (event: KeyboardEvent) => {
    
      if (isNaN(Number(event.key))) {
        event.preventDefault();
        return false;
      } else {
        return true;
      }
    });
    

    【讨论】:

    • 但它仍在接受文本....我只需要接受数字
    • 更新了答案。现在应该没问题了。
    • 当我在 TypeScript 中特别是在 isNaN(event.key) 行中使用您的代码时出现错误。它显示 类型事件中不存在属性键。如何解决这个问题?
    • (event)更改为(event: KeyboardEvent)
    • 更改为(事件:KeyboardEvent)但出现错误 Error TS2769 (TS) 没有重载匹配此调用。重载 1 of 2, '(type: "fullscreenchange" | "fullscreenerror", listener: (this: Element, ev: Event) => any, options?: boolean | AddEventListenerOptions | undefined): void',给出以下错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2017-06-08
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多