2013-04-13 173 views
2

我有很多功能用来计算一些统计数据,我需要的价值的每一次复检但这是额外的代码,使的它难以阅读,我可以赋值的变量存储在另一个功能:我可以缩短我的代码吗?

function MC() { 
var check=document.getElementById('check').checked; 

var ea=Number(document.form.ea.value), 
    ed=Number(document.form.ed.value), 
    pa=Number(document.form.pa.value), 
    pd=Number(document.form.pd.value); 

var hpSum = 0,spSum=0,eaSum=0,edSum=0,pdSum=0,paSum=0; 

if(check){ 
    eaSum = ea + 11; 
    edSum = ed + 17; 
    pdSum = pd + 17; 
    paSum = pa + 11; 
} else { 
    eaSum = ea - 11; 
    edSum = ed - 17; 
    pdSum = pd - 17; 
    paSum = pa - 11; 
} 

    document.form.ea.value=eaSum; 
    document.form.ed.value=edSum; 
    document.form.pa.value=paSum; 
    document.form.pd.value=pdSum; 
}; 

注意:我在说变量:ea,ed,pa,pd和sum变量。

回答

1

你可以尝试建立的参数的对象:

function MC() { 
    var check = document.getElementById('check').checked, 
     keys = { 
     "ea":11, 
     "ed":17, 
     "pd":17, 
     "pa":11 
     }, i; 
    for(i in keys) { if(keys.hasOwnProperty(i)) { 
    document.form[i].value = +document.form[i].value + (check ? keys[i] : -keys[i]); 
    }} 
} 

注意+somevarparseFloat(somevar)便宜的快捷方式。 Number(somevar)与创建一个可能会干扰比较的包装对象不相同,因为如果您稍后添加任何包装对象。

+0

也注意到'check'是本地的,'keys'和'i'是全球 – vol7ron

+0

将这个是最好的解决方案,因为我有60多个文物像MC(+统计数据和一些给予EA,ED一些PA pd,一些惠普等)? – aleksXPO

+0

您可以将'keys'对象作为参数传递,而不是将其硬编码到函数中,然后可以调用'MC'来调整您需要的任何内容。 –

0

我会用你自己的代码去压缩一下。假设form是表单的名称,那么需要更多的代码来跟踪哪些输入发生了变化,而不是读取它们。

function MC() { 
    var f= document.form, 
    v= document.getElementById('check').checked? [11, 17]:[-11, -17]; 
    f.ea.value= Number(f.ea.value)+v[0]; 
    f.ed.value= Number(f.ed.value)+v[1]; 
    f.pa.value= Number(f.pa.value)+v[0]; 
    f.pd.value= Number(f.pd.value)+v[1]; 
}