【发布时间】:2015-10-20 19:08:44
【问题描述】:
我有以下 html5 输入元素:
<input type="number">
为什么这个输入允许在输入字段中输入字符“e”?无法输入其他字母字符(如预期的那样)
使用 chrome v. 44.0.2403.107
下面的例子来看看我的意思。
<input type="number">
【问题讨论】:
-
它还允许您在某些浏览器中多次输入+、-和
.。
我有以下 html5 输入元素:
<input type="number">
为什么这个输入允许在输入字段中输入字符“e”?无法输入其他字母字符(如预期的那样)
使用 chrome v. 44.0.2403.107
下面的例子来看看我的意思。
<input type="number">
【问题讨论】:
.。
<input type="number" onKeyDown={(e) =>["e", "E", "+", "-"].includes(e.key) && e.preventDefault()} >
【讨论】:
简单标准的解决方案:在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"
min="1"
step="1"
onkeypress="return event.keyCode === 8 || event.charCode >= 48 && event.charCode <= 57">
此解决方案不会阻止复制和粘贴(包括字母“e”)。
【讨论】:
功能与 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);
}
【讨论】:
强制使用仅由数字组成的数字的最佳方法:
<input type="number" onkeydown="javascript: return event.keyCode === 8 ||
event.keyCode === 46 ? true : !isNaN(Number(event.key))" />
只允许数字键:
isNaN(数字(event.key))
但接受 "Backspace" (keyCode: 8) 和 "Delete" (keyCode: 46) ...
【讨论】:
使用角度,你可以这样做来限制输入e,+,-,E
<input type="number" (keypress)="numericOnly($event)"/>
numericOnly(event): boolean { // restrict e,+,-,E characters in input type number
debugger
const charCode = (event.which) ? event.which : event.keyCode;
if (charCode == 101 || charCode == 69 || charCode == 45 || charCode == 43) {
return false;
}
return true;
}
【讨论】:
要隐藏字母 e 和减号 -,只需:
onkeydown="return event.keyCode !== 69 && event.keyCode !== 189"
【讨论】:
因为这正是the spec 所说的应该起作用的方式。数字输入可以接受floating-point numbers,包括负号和e或E字符(其中指数为e或E后面的数字):
一个浮点数由以下部分组成,确切地说 以下顺序:
- (可选)第一个字符可以是“
-”字符。- “
0—9”范围内的一个或多个字符。- (可选)以下部分,完全按照以下顺序:
- 一个“
.”字符- “
0—9”范围内的一个或多个字符- (可选)以下部分,完全按照以下顺序:
- 一个“
e”字符或“E”字符- (可选)“
-”字符或“+”字符- “
0—9”范围内的一个或多个字符。
【讨论】:
e 对于压缩大量数字很有用,否则输入起来会很乏味。举个简单的例子,2e2 = 2*10^2 = 200
e 代表指数。
我们可以让它变得像下面这样简单
<input type="number" onkeydown="javascript: return event.keyCode == 69 ? false : true" />
更新答案
我们可以像@88 MPG 建议的那样让它变得更简单
<input type="number" onkeydown="return event.keyCode !== 69" />
【讨论】:
return event.keyCode !== 69,因为它避免了不必要的三元运算符。也不推荐内联。
e 或 E
e 或E 的实例,非数学家可能不知道可以添加到此条件检查中?
HTML 输入数字类型允许“e/E”,因为“e”代表指数,它是一个数字符号。
例子200000也可以写成2e5。我希望这有助于谢谢你的问题。
【讨论】:
<input type="number" onkeydown="return FilterInput(event)" onpaste="handlePaste(event)" >
function FilterInput(event) {
var keyCode = ('which' in event) ? event.which : event.keyCode;
isNotWanted = (keyCode == 69 || keyCode == 101);
return !isNotWanted;
};
function handlePaste (e) {
var clipboardData, pastedData;
// Get pasted data via clipboard API
clipboardData = e.clipboardData || window.clipboardData;
pastedData = clipboardData.getData('Text').toUpperCase();
if(pastedData.indexOf('E')>-1) {
//alert('found an E');
e.stopPropagation();
e.preventDefault();
}
};
【讨论】: