3

Here is my function:

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);
}

It checks Q, if it's less than 0, it makes it 0. Then, if it's not 0, but it's less than E, it makes it E. For some reason this function works UNLESS Q is a double digit number.

For example, if Q is 7 and E is 2, then it will leave Q at 7. However, if Q is 10 and E is 2, for some reason it thinks that 10<2, and it changes Q to 2!

Am I missing something here??

4

4 に答える 4

10

要素の をプルする.valueと、文字列が返されます。'10'<'2'true を返します。

値 ala に対して parseInt/parseFloat を実行するだけです。

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 に答える