我的if语句仅评估第一个条件,第二个条件评估在||之后被忽视了。如何解决这个问题?
function validateAge(input) {
if ((input.value < 0 || input.value > 110) || (input.value.match(/[^0-9]/))) {
input.setCustomValidity("Dozwolony zakres: od 0 do 110");
} else {
input.setCustomValidity("");
}
}
答案 0 :(得分:6)
嗯,有一种叫做lazy evaluation的东西。如果没有必要,JavaScript解释器将不会评估某些内容。在析取(||
)时,当第一个语句求值为true
时,整个表达式为真,这就是为什么当JavaScript解释器评估:(input.value < 0 || input.value > 110)
为真时,没有必要计算(input.value < 0 || input.value > 110)
。
如果(input.value.match(/[^0-9]/))
是“显示停止”,您可以按以下方式继续:
if ((input.value.match(/[^0-9]/)) || (input.value < 0 || input.value > 110))
如果我理解正确,你需要这样的东西:
function validateValue(input) {
var value = input.value;
if (/^\d+$/.test(value)) {
value = parseInt(value, 10);
} else {
return false;
}
return value < 0 || value > 110;
}