2013-04-13 229 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]; 
}