我有以下html5输入元素:
<input type="number">
为什么此输入允许在输入字段中输入字符“ e”?没有其他字母字符可以输入(按预期方式)
使用chrome v.44.0.2403.107
明白我的意思:http : //www.w3schools.com/html/tryit.asp ?filename= tryhtml_input_number
我有以下html5输入元素:
<input type="number">
为什么此输入允许在输入字段中输入字符“ e”?没有其他字母字符可以输入(按预期方式)
使用chrome v.44.0.2403.107
明白我的意思:http : //www.w3schools.com/html/tryit.asp ?filename= tryhtml_input_number
Answers:
因为这正是规范所说的应该工作的方式。输入的数字可以接受浮点数,包括负号和e
或E
字符(其中指数是e
或之后的数字E
):
浮点数由以下几部分组成,按照以下顺序:
- 可选地,第一个字符可以是“
-
”字符。- “
0—9
” 范围内的一个或多个字符。- 可选地,以下部分按完全相同的顺序排列:
- 一个“
.
”字符- “
0—9
” 范围内的一个或多个字符- 可选地,以下部分按完全相同的顺序排列:
- “
e
”字符或“E
”字符- (可选)“
-
”字符或“+
”字符- “
0—9
” 范围内的一个或多个字符。
e
可以压缩大量的数字,否则将很难输入。作为一个简单的例子,2e2 = 2*10^2 = 200
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();
}
};
要隐藏字母e
和减号,-
只需:
onkeydown="return event.keyCode !== 69 && event.keyCode !== 189"
您可以使用angular来限制输入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;
}
功能与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);
}
.
在某些浏览器中多次输入+,-和。