2016-01-21 124 views
0

我有以下功能,我想用for循環來簡化,但不知道如何去做。任何幫助都感激不盡。基本上,如果字段值爲0或null,那麼我的總值(字段)應該爲0,否則如果字段值從1到1000,那麼總值變爲5000.對於每1000(即1001直到2000),我的總值應該是增加50即5050.這應該繼續,直到字段值達到200000並且總數是50000.JavaScript - 簡化/縮短代碼

function calc56() { 
    var56 = parseFloat(document.getElementById('units56').value - 0); 

    if (var56 == '' || var56 == 0) { 
     document.getElementById('amount56').value = 0; 
    } 
    else if (var56 < 1000) { 
     document.getElementById('amount56').value = 5000; 
    } 
    else if ((var56 > 1000) && (var56 <= 2000)) { 
     document.getElementById('amount56').value = 5050; 
    } 
    else if ((var56 > 2000) && (var56 <= 3000)) { 
     document.getElementById('amount56').value = 5100; 
    } 
} 

在此先感謝。

+5

我投票結束這個問題作爲題外話題,因爲它要求改進工作代碼。問codereview.stackexchange.com –

+0

- 請將問題遷移到正確的網站。 –

+0

關於你的代碼的幾件事。如果var56小於0,你仍然會得到1000,你會說1到1000,但是你的條件是var56 <1000,這意味着它只能工作到999,1000不會觸發任何條件。 – gothical

回答

1
function calc56() { 
    var el = document.getElementById('units56'); //reference the dom element 
    var val = +el.value; //convert to float 

    if (!val) { //if no value, leave untouched 

    } else if (val < 0) { //if value is less than 0, make it 0. 
     el.value = 0; 
    } else { //otherwise, calculate new value 
     var mod = Math.floor(val/1000); //calc how many 1000s fit in the value 
     el.value = mod * 50 + 5000; //use at least 5000, and add 50 for every 1000 
    } 
} 

我建議你也改變功能的名稱,因爲它不是很有用。但是,這裏的代碼應該是在保持可讀性的同時最有效的。

如果您需要更多解釋,請隨時在評論中提問!

+0

如果您認爲您的代碼效率最高,請檢查我的解決方案(2個小功能,7行代碼,任何人都可以查看的實時代碼段) –

+0

感謝您的幫助。 – fatsoua

+0

那麼,因爲你的答案包含更多的函數調用,所以重複一個DOM查詢,並且即使不更改值,@AlexanderElgin也能夠觸發DOM重繪,我不必花很長時間才能看到我的答案效率更高;-) –