这是我的功能:
function reCalculate(i) {
document.getElementById("Q" + i).value = document.getElementById("C" + i).value - document.getElementById("QA" + i).value;
if (document.getElementById("Q" + i).value < 0) {
document.getElementById("Q" + i).value = 0;
}
if (document.getElementById("Q" + i).value < document.getElementById("E" + i).value && document.getElementById("Q" + i).value != 0) {
alert(document.getElementById("Q" + i).value + " is less than " + document.getElementById("E" + i).value + "?");
document.getElementById("Q" + i).value = document.getElementById("E" + i).value;
}
document.getElementById("Q" + i).value = Math.ceil(document.getElementById("Q" + i).value);
}
它检查Q,如果它小于0,则使其为0.然后,如果它不是0,但它小于E,则它成为E.对于某些这个功能起作用的原因除非Q是一个两位数字。
例如,如果Q为7且E为2,则将Q保留为7.但是,如果Q为10且E为2,则由于某种原因它认为10 <2,并且它将Q更改为2 !
我在这里错过了什么吗?
答案 0 :(得分:9)
当你拉出元素的.value
时,它会返回一个字符串。 '10'<'2'
将返回true。
你可以简单地对值ala
做一个parseInt / parseFloatvar q = parseInt(document.getElementById("Q"+i).value,10)
答案 1 :(得分:4)
这是因为它在比较时将您的Q
视为字符串。
请尝试以下方法:
function reCalculate(i){
var Z = document.getElementById, P = parseInt;
var qElem = Z("Q"+i);
var q = P(qElem.value, 10);
var c = P(Z("C"+i).value, 10);
var qa = P(Z("QA"+i).value, 10);
var e = P(Z("E"+i).value, 10);
q = c - qa;
if (q < 0) qElem.value = 0;
if (q < e && q != 0){
alert(q+" is less than "+e+"?");
qElem.value = e;
}
qElem.value = Math.ceil(q);
}
答案 2 :(得分:1)
可能你应该做一个
parseFloat(document.getElementById("Q"+i).value)
确保您正在比较数字
答案 3 :(得分:0)
您正在比较字符串而不是数字。使用一元+
转换为数字:
if (+document.getElementById("Q" + i).value < +document.getElementById("E" + i).value ...)
你应该使用变量:
var input_one = document.getElementById("Q" + i).value,
input_two = document.getElementById("E" + i).value;
if (+input_one < +input_two) {
}