如果用户在<input type=number>
中输入无效值(例如:“ 1.2.3”),则Chrome和Firefox会将<input>
的{{1}}属性报告为{{1 }},而不是value
。
那么,如何判断用户在""
中输入了无效数字还是将其留空?
我尝试使用"1.2.3"
属性,但在两种情况下均为<input>
。
valueAsNumber
NaN
答案 0 :(得分:3)
您的输入元素具有实现ValidityState
接口的validity
属性:
ValidityState {
badInput: true,
customError: false,
patternMismatch: false,
rangeOverflow: false,
rangeUnderflow: false,
stepMismatch: false,
tooLong: false,
tooShort: false,
typeMismatch: false,
valid: false,
valueMissing: false
}
从这里您可以研究所有有效性状态(valueMissing
,badInput
等)
您可以使用document.querySelector
获得对您的输入的引用。
在您的情况下,空输入将设置valueMissing
标志,而“ 1.2.3”输入将设置badInput
标志。
答案 1 :(得分:1)
根据对此question的回答,除非它是有效的数字输入,否则将无法获得类型为number
的输入字段的值。
另一方面,您可以改为输入text
类型的输入字段,并借助正则表达式进行验证,如下所示:
window.onload = ()=>{
let numBox = document.getElementById('number-box');
let button = document.getElementById('show-value');
let pattern = /^\d*(\.\d+)?$/;
numBox.addEventListener('input', function(){
if(pattern.test(this.value) && this.value !== ''){
console.log('valid');
}
else {
console.log('invalid!');
}
});
button.addEventListener('click', ()=>{
alert(`The current value in the input field is ${numBox.value}`);
});
};
<input type="text" id="number-box">
<input type="button" id="show-value" value="Show Value">
另外,这是working example:)
答案 2 :(得分:0)
您可以使用jquery $。isNumeric()函数进行数字验证,如下所示。
function showInputValue() {
const inputValue = document.getElementById("numberInput").value;
//const inputValueAsNumber =
//document.getElementById("numberInput").valueAsNumber;
if(inputValue !== '' && $.isNumeric(inputValue))
{
alert("number is ok");
}
else if(inputValue == '')
{
alert("input is empty");
}
else {
alert("Number is invalid");
}
}