3

这是我的功能:

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!

我在这里错过了什么吗?

4

4 回答 4

10

当您拉出.value一个元素时,它会返回一个字符串。'10'<'2'将返回真。

您可以简单地对值执行 parseInt/parseFloat,ala

var q = parseInt(document.getElementById("Q"+i).value,10)
于 2012-12-27T15:17:57.480 回答
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);
}
于 2012-12-27T15:17:25.683 回答
1

也许你应该做一个

parseFloat(document.getElementById("Q"+i).value)

确保您在比较数字

于 2012-12-27T15:17:56.590 回答
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) {

}
于 2012-12-27T15:20:59.720 回答