我有以下html5输入元素:

<input type="number">

为什么这个输入允许在输入字段中输入字符“e”?无法输入其他字母字符(如预期的那样)

使用chrome v. 44.0.2403.107

下面的例子来看看我的意思。

= >“当家”型输入<


当前回答

一个简单的解决方案,排除除整数

<输入 类型=“数字” min=“1” 步骤=“1” onkeypress=“return event.keyCode === 8 ||事件.字符代码 >= 48 &&; 事件.字符代码 <= 57“>

此解决方案不防止复制和粘贴(包括字母“e”)。

其他回答

我们可以像下面这样简单

<input type="number" onkeydown="javascript:返回事件。keyCode == 69 ?/> . False: true

更新后的答案

我们可以让它更简单,就像@88 MPG建议的那样

<输入类型=“编号”=“回归事件”。键盘代码!

角;与IDE keyCode弃用警告

功能上与rinku的答案相同,但有IDE警告预防

numericOnly(event): boolean {
    // noinspection JSDeprecatedSymbols
    const charCode = (event.which) ? event.which : event.key || event.keyCode;  // keyCode is deprecated but needed for some browsers
    return !(charCode === 101 || charCode === 69 || charCode === 45 || charCode === 43);
}

如果你按下一个键,它的计算机语言相当于69,它就不会输入

<input
 type="number"
 onkeydown="return event.keyCode !== 69"
/>

简单而标准的解决方案:在Angular/ Js/ Ts中,你可以使用正则表达式来限制任何输入键。

HTML: <input type=“text” name=“input1” (keypress)=“numericOnly($event)” />

TS:

    numericPattern = /^[0-9]*$/;
    numericOnly(event){
       return this.numericPattern.test(event.key);
    }

<input type="number" onkeydown="javascript: return ['Backspace','Delete','ArrowLeft','ArrowRight'].includes(event.code) ?isNaN(Number(event.key)) && event.code!= =‘空间’" / >