关于数组形式的表单计算,请高手帮我转成多行可计算的表单!

webdevelop 2005-06-17 11:15:40

<script language="javascript">

function res(obj){
obj.result[1].value=eval(obj.afield[1].value)+eval(obj.bfield[1].value)+eval(obj.cfield[1].value)+eval(obj.dfield[1].value)+eval(obj.efield[1].value)
}

</script>

<form action="cgi.exe" method="get">

<input type="text" name="afield[1]" value="0" size="8" onchange="res(this.form)">
<input type="text" name="bfield[1]" value="0" size="8" onchange="res(this.form)">
<input type="text" name="cfield[1]" value="0" size="8" onchange="res(this.form)">
<input type="text" name="dfield[1]" value="0" size="8" onchange="res(this.form)">
<input type="text" name="efield[1]" value="0" size="8" onchange="res(this.form)">
<input type="text" name="result[1]" DISABLED size="8">

</form>
...全文
113 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
webdevelop 2005-06-20
  • 打赏
  • 举报
回复
现在程序没有错误,但现在只有一行,如果有两行或两行以上怎么计算?
meizz 2005-06-20
  • 打赏
  • 举报
回复
首先你的 name 命名就不太遵守规范, 你这个命名与数组下标会产生岐义.
阿信的写法是正确的, 用document.formName.elements[inputName]; 这种方式调用到这个控件就不会有岐义错误了
TechnoFantasy 2005-06-20
  • 打赏
  • 举报
回复
又修改了一下,刚才的加是实现的字符串相加,现在改成了数字相加:


<script language="javascript">


function calAdd(a1, a2){
return Number(a1) + Number(a2);
}

function res(obj, index){
var sRes;
var sEle1;
var sEle2;
var sVal;

sRes = "document.calForm.elements['cresult[" + index + "]'].value";
sEle1 = "document.calForm.elements['afield[" + index + "]'].value";
sEle2 = "document.calForm.elements['bfield[" + index + "]'].value";

eval(sRes + "=calAdd(" + sEle1 + ", " + sEle2 + ")");
//eval(sRes + "=" + sVal);
}


</script>

<form action="cgi.exe" method="get" name = "calForm">

<input type="text" name="afield[1]" value="0" size="8" onchange="res(this.calForm, 1)">
<input type="text" name="bfield[1]" value="0" size="8" onchange="res(this.calForm, 1)">
<input type="text" name="cresult[1]" DISABLED size="8">
<br>
<input type="text" name="afield[2]" value="0" size="8" onchange="res(this.calForm, 2)">
<input type="text" name="bfield[2]" value="0" size="8" onchange="res(this.calForm, 2)">
<input type="text" name="cresult[2]" DISABLED size="8">
</form>
TechnoFantasy 2005-06-20
  • 打赏
  • 举报
回复
修改了一下,可以支持多行的计算:

<script language="javascript">

function res(obj, index){
var sRes;
var sEle1;
var sEle2;
var sVal;

sRes = "document.calForm.elements['cresult[" + index + "]'].value";
sEle1 = "document.calForm.elements['afield[" + index + "]'].value";
sEle2 = "document.calForm.elements['bfield[" + index + "]'].value";

sVal = eval(sEle1 + "+" + sEle2);
eval(sRes + "=" + sVal);
}

</script>

<form action="cgi.exe" method="get" name = "calForm">

<input type="text" name="afield[1]" value="0" size="8" onchange="res(this.calForm, 1)">
<input type="text" name="bfield[1]" value="0" size="8" onchange="res(this.calForm, 1)">
<input type="text" name="cresult[1]" DISABLED size="8">
<br>
<input type="text" name="afield[2]" value="0" size="8" onchange="res(this.calForm, 2)">
<input type="text" name="bfield[2]" value="0" size="8" onchange="res(this.calForm, 2)">
<input type="text" name="cresult[2]" DISABLED size="8">
</form>
webdevelop 2005-06-20
  • 打赏
  • 举报
回复
UP
aniude 2005-06-20
  • 打赏
  • 举报
回复
这个只能根据你所需要的计算进行定义吧 :)
webdevelop 2005-06-20
  • 打赏
  • 举报
回复
怎么啊,怎么办?
webdevelop 2005-06-19
  • 打赏
  • 举报
回复
现在提供的只是单行可计算,如果有2行,或2行以上呢?
webdevelop 2005-06-19
  • 打赏
  • 举报
回复
但是我如果有result[2],result[3],result[4]...

<input type="text" name="afield[1]" value="0" size="8" onchange="res(this.form)">
<input type="text" name="afield[2]" value="0" size="8" onchange="res(this.form)">
<input type="text" name="afield[3]" value="0" size="8" onchange="res(this.form)">
...
aniude 2005-06-19
  • 打赏
  • 举报
回复
不太明白楼主的意思 :(
majiming 2005-06-18
  • 打赏
  • 举报
回复
你现在的不已经可以计算了吗
TechnoFantasy 2005-06-18
  • 打赏
  • 举报
回复
<script language="javascript">

function res(obj){
obj.result.value=eval(obj.afield.value)+eval(obj.bfield.value)+eval(obj.cfield.value)+eval(obj.dfield.value)+eval(obj.efield.value)
}

</script>

<form action="cgi.exe" method="get" name = "calForm">

<input type="text" name="afield" value="0" size="8" onchange="res(calForm)">
<input type="text" name="bfield" value="0" size="8" onchange="res(calForm)">
<input type="text" name="cfield" value="0" size="8" onchange="res(calForm)">
<input type="text" name="dfield" value="0" size="8" onchange="res(calForm)">
<input type="text" name="efield" value="0" size="8" onchange="res(calForm)">
<input type="text" name="result" DISABLED size="8">

</form>

是这样吗?在前面的文本框里面输数字,在最后一个文本框显示相加结果。
fason 2005-06-18
  • 打赏
  • 举报
回复
正确的方法应该是这样
假设<form name="frm">

var el = document.frm.elements["result[1]"];
el.value = "***"

用document.formName.elements[inputName]

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧