我有许多用于计算某些统计数据的函数,我需要每次重新检查该值,但这是额外的代码并且使得它更难以读取,我可以将变量赋值存储在另一个函数中:
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变量。
答案 0 :(得分: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]);
}}
}
请注意,+somevar
是parseFloat(somevar)
的便宜快捷方式。 Number(somevar)
与创建包装器对象不同,如果稍后添加任何对象,可能会干扰比较。
答案 1 :(得分: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];
}