2016-01-21 108 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重绘,我不必花很长时间才能看到我的答案效率更高;-) –