2012-12-27 69 views
3

這裏是我的功能:的javascript「小於」 if語句失敗

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.它出於某種原因,此功能工作除非Q是一個雙位數字。

例如,如果Q是7並且E是2,那麼它將使Q保持在7.然而,如果Q是10並且E是2,由於某種原因它認爲是10 < 2,並且它將Q改變爲2!

我在這裏錯過了什麼?

+3

請緩存你的DOM元素變量。每次使用getById都會回到DOM中,並且性能很高。 – rlemon

+0

好點,我解決了,謝謝! – fullOfQuestions

回答

9

當你把它返回元素的.value一個字符串。 '10'<'2'將返回true。

你可以簡單地做價值一parseInt函數/ parseFloat,ALA

var q = parseInt(document.getElementById("Q"+i).value,10) 
+4

你應該使用基數'parseInt(x,10)' – epascarello

+0

@epascarello好點,已更新。 – Snuffleupagus

+0

這樣做的技巧,謝謝! – fullOfQuestions

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

告訴海報如何解決它! – epascarello

+0

@epascarello - 在發佈之前正在格式化代碼.. :-) – techfoobar

+0

一個很好的旁註:除了較短的代碼,使用'var Z = document.getElementById;'實際上使代碼更有效。 [同樣的原則在這裏。](http://stackoverflow.com/questions/13451729/assign-objectkey-to-a-temp-variable-in-a-javascript-for-in-loop) – Cerbrus

1

可能是你應該做一個

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

,以確保您比較數字

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) { 

} 
+0

爲了記錄它沒有長度比較。雖然我不太清楚比較結果。 (「10」比「2」長,但「10」<2「評估爲真) – Snuffleupagus