注册 登录
编程论坛 ASP技术论坛

大家请看一下,这个怎样计算? (此问题已解决:鸣谢:ayue222,jkll007123,QQQQQQQQQQQQ)

zhongx 发布于 2007-08-17 01:03, 1177 次点击
表单框A为数量,表单框B为单价,AB相乘的结果即时(在不提交的情况下)显示在表单框C中,接着表单框C减去表单框D(表单框D的金额用手工输入),得到的结果即时(在不提交的情况下)显示在表单框E中.最后提交,把表单框ABCDE的数据全部写入数据库.




(此问题已解决: 鸣谢: ayue222, jkll007123, QQQQQQQQQQQQ )

[此贴子已经被作者于2007-8-17 20:24:01编辑过]

23 回复
#2
sdgjsddd2007-08-17 04:52
用事件触发解决,失去焦点触发也行,键盘触发也行
#3
zhongx2007-08-17 09:33
回复:(sdgjsddd)用事件触发解决,失去焦点触发也行,...
请问有代码吗?
#4
ayue2222007-08-17 09:40
<form ....>
<input type=text name=A ID=A value="<%=A%>">
<input type=text name=B ID=B value="<%=B%>">
<input type=text name=C ID=C value="0" Onload="this.value=document.getElementById("A").value*document.getElementById("B").value;">
<input type=text name=D ID=D value="" OnBlur="if ((document.getElementById("D").value!=0||document.getElementById("D").value!='')&&this.value!='')document.getElementById("E").value=document.getElementById("C").value-this.value;">
<input type=text name=E ID=E value="">
<input type=submit name=submit value="submit">
</form>

[此贴子已经被作者于2007-8-17 10:06:20编辑过]

#5
zhongx2007-08-17 10:02
回复:(ayue222)
我先试一下,谢谢您!
#6
jkll0071232007-08-17 12:43
<html>
<head>
<style type="text/css">
<!--
.input1 {
border-top-width:0px;
border-left-width:0px;
border-right-width:0px;
border-bottom-width:3px;
border-style:double;
border-color:#e0e0e0;
cursor:hand;
color:#808080;
}
.input2{
background-color:#fafafa;
width:250;
height:30;
font-weight:bold;
font-size:12px;
color:#808080;
}
-->
</style>
</head>
<script language="javascript">
function show()
{
document.all.total.value=parseInt(document.all.num.value)*parseInt(document.all.unit.value);
}
function show1()
{
document.all.result.value=parseInt(document.all.total.value)-parseInt(document.all.num1.value);
}
</script>
<body text="#808080">
<div align="center">
<form>
A:<input type=text id="num" class="input1">&nbsp;&nbsp;
B:<input type=text id="unit" onkeyup="show()" class="input1">&nbsp;&nbsp;
C:<input type=text id="total" class="input1" style="border-style:dotted;" readonly value="相乘结果">&nbsp;&nbsp;
D:<input type=text id="num1" onkeyup="show1()" class="input1">&nbsp;&nbsp;
E:<input type=text id="result" class="input1" style="border-style:dotted;" readonly value="相减结果"><p>
<input type=submit value="将所有值提交到数据库" class="input2">
</form>
</div>
</body>
</html>
#7
zhongx2007-08-17 13:21
回复:(ayue222)
还是未能自动计算啊.............
是不是有错误?
#8
zhongx2007-08-17 13:25
回复:(jkll007123)
已经成功,多谢!
谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢
谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢............
#9
zhongx2007-08-17 13:36
回复:(jkll007123)
又有一个问题是:当使用 包含小数点的数值时 ,计算结果就不会计算或出错.
那怎么改进呢?
#10
QQQQQQQQQQQQ2007-08-17 13:38
应该用捕获事件改变时
#11
zhongx2007-08-17 13:49
回复:(QQQQQQQQQQQQ)应该用捕获事件改变时
您愿意为这个问题,写段代码吗?
包含小数点的数值时.
#12
zhongx2007-08-17 14:18
回复:(ayue222)
A乘B的积,未能反映在表单框C,基本上没有执行过计算............

要求功能像 [ 作者:jkll007123 ] 给出的代码所实现的功能一样,

如果能连 [包含小数点的数值] 也能够计算,那就更好了,

因为很多的数据都包含着 小数点的.
#13
ayue2222007-08-17 14:21
<script language="javascript">
function show()
{
document.all.total.value=parseInt(document.all.num.value*document.all.unit.value).toFixed(0);
}
function show1()
{
document.all.result.value=parseInt(document.all.total.value-document.all.num1.value).toFixed(0);
}
</script>

用6楼朋友现成的 了 ....之前那个太糙了 ...
#14
jkll0071232007-08-17 14:29
要计算小数点的把parseInt改成parseFloat就可以了
#15
QQQQQQQQQQQQ2007-08-17 15:10
[QUOTE]<form name="form1">
数量:<input type="text" name="aa_1" onpropertychange="bb()" onkeyup="this.value=this.value.replace(/[^\d\.]/g,'')"><br>
单价:<input type="text" name="aa_2" onpropertychange="bb()" onkeyup="this.value=this.value.replace(/[^\d\.]/g,'')"><br>
总价:<input type="text" name="aa_3"><br>
付款:<input type="text" name="aa_4" onpropertychange="bb()" onkeyup="this.value=this.value.replace(/[^\d\.]/g,'')"><br>
找零:<input type="text" name="aa_5"><br>
</form>
<script language="javascript">
function bb(){
if(document.form1.aa_1.value!="" && document.form1.aa_2.value!=""){
document.form1.aa_3.value=(document.form1.aa_1.value*document.form1.aa_2.value).toFixed(2);
if(document.form1.aa_4.value!=""){
document.form1.aa_5.value=document.form1.aa_4.value-document.form1.aa_3.value;
}
}
}
</script>[/QUOTE]

我只会一点正则表达式
onkeyup="this.value=this.value.replace(/[^\d\.]/g,'')"这个正则表达式可以改一下,只让用户输入一个小数点
#16
QQQQQQQQQQQQ2007-08-17 15:19
想了一下,可以写两个正则,判断是否以有小数点,有执行

/[^\d]/g

没有就执行

[^\d\.]/g

这样就能保证用户正确输入
#17
zhongx2007-08-17 17:06
以下是引用jkll007123在2007-8-17 14:29:27的发言:
要计算小数点的把parseInt改成parseFloat就可以了

把parseInt改成parseFloat还是未成功..............

#18
zhongx2007-08-17 17:28
以下是引用ayue222在2007-8-17 14:21:12的发言:
<script language="javascript">
function show()
{
document.all.total.value=parseInt(document.all.num.value*document.all.unit.value).toFixed(0);
}
function show1()
{
document.all.result.value=parseInt(document.all.total.value-document.all.num1.value).toFixed(0);
}
</script>

用6楼朋友现成的 了 ....之前那个太糙了 ...

按这个方法得出的结果是:

表单C和表单E的数值不显示小数点,
若是 0.1 - 0.5 计算时当 0 , 0.6 - 0.9 当 1 .

结论是: 表单C和表单E的得数不正确.

能否在这个基础上加以改进?

#19
ayue2222007-08-17 17:36
<script language="javascript">
function show()
{
document.all.total.value=(document.all.num.value*document.all.unit.value).toFixed(2);
}
function show1()
{
document.all.result.value=(document.all.total.value-document.all.num1.value).toFixed(2);
}
</script>

干脆不要取整咯...偶也不知道这样行不行 ...JS很菜滴说 ....

#20
zhongx2007-08-17 17:42
以下是引用QQQQQQQQQQQQ在2007-8-17 15:10:23的发言:
<form name="form1">
数量:<input type="text" name="aa_1" onpropertychange="bb()" onkeyup="this.value=this.value.replace(/[^\d\.]/g,'')"><br>
单价:<input type="text" name="aa_2" onpropertychange="bb()" onkeyup="this.value=this.value.replace(/[^\d\.]/g,'')"><br>
总价:<input type="text" name="aa_3"><br>
付款:<input type="text" name="aa_4" onpropertychange="bb()" onkeyup="this.value=this.value.replace(/[^\d\.]/g,'')"><br>
找零:<input type="text" name="aa_5"><br>
</form>
<script language="javascript">
function bb(){
if(document.form1.aa_1.value!="" && document.form1.aa_2.value!=""){
document.form1.aa_3.value=(document.form1.aa_1.value*document.form1.aa_2.value).toFixed(2);
if(document.form1.aa_4.value!=""){
document.form1.aa_5.value=document.form1.aa_4.value-document.form1.aa_3.value;
}
}
}
</script>


我只会一点正则表达式
onkeyup="this.value=this.value.replace(/[^\d\.]/g,'')"这个正则表达式可以改一下,只让用户输入一个小数点

按照您的这个方法可行,您可否在 [总价] 和 [付款] 之间加上 [减免] 和 [实收] 这二个项目呢?

#21
QQQQQQQQQQQQ2007-08-17 18:12

可以
得出总价的同时算出打折

#22
zhongx2007-08-17 18:44
以下是引用QQQQQQQQQQQQ在2007-8-17 18:12:20的发言:

可以
得出总价的同时算出打折

[减免]是随意手动输入金额,并不是打折,可以吗?

能否在您的代码上加入,并发表在这里让大参考参考.............

#23
zhongx2007-08-17 19:08
回复:(ayue222)
朋友辛苦您了,衷心感谢您!!!
#24
thintear2007-08-17 19:33
<form name="form1">
数量:<input type="text" name="aa_1" onpropertychange="bb()" onkeyup="this.value=this.value.replace(/[^\d\.]/g,'')"><br>
单价:<input type="text" name="aa_2" onpropertychange="bb()" onkeyup="this.value=this.value.replace(/[^\d\.]/g,'')"><br>
总价:<input type="text" name="aa_3"><br>
付款:<input type="text" name="aa_4" onpropertychange="bb()" onkeyup="this.value=this.value.replace(/[^\d\.]/g,'')"><br>
找零:<input type="text" name="aa_5"><br>
</form>
<script language="javascript">
function bb(){
if(document.form1.aa_1.value!="" && document.form1.aa_2.value!=""){
document.form1.aa_3.value=(document.form1.aa_1.value*document.form1.aa_2.value).toFixed(2);
if(document.form1.aa_4.value!=""){
document.form1.aa_5.value=document.form1.aa_4.value-document.form1.aa_3.value;
}
}
}
</script>
1