该程序的目的是实现:用obj输入框用来记录 tmp1,tmp2和(实际中我的tmp输入框会有很多个,所以,我用last来记录某一tmp输入框在修改前的值;并且想将结果(所有输入值的总和)在tmp的onpropertychange中显示到obj输入框)function retsetMe(tmp) 用于处理用户的isNaN输入;
function recordlast(last, tmp) 记录tmp在修改前的值;
function calculate(obj, last, tmp) 计算,并将结果显示到obj输入库现将程序重贴一遍:<HTML>
<HEAD>
<script language="javascript">

function calculate(obj, last, tmp)
{
var oValue = obj.value;
var lValue = last.value;
var tValue = tmp.value;

if(tValue == ""){ tValue = 0; }
else
{ if(isNaN(tValue)) {tmp.value = 0; }
else
{ var ret = oValue - (lValue - tValue)  ;
obj.value = ret;
}
}
}

function recordlast(last, tmp)
{
if(isNaN(tmp.value) || tmp.value=="") {last.value = 0;}
else
{
last.value = tmp.value;
}

tmp.select();
}

function retsetMe(tmp){

if(isNaN(tmp.value)){ tmp.value=0; }
}

</script>
</HEAD>
<body>
<form id="Form1">
obj:<INPUT id="obj" type="text" disabled name="obj" runat="server"> tmp:<INPUT id="last" disabled type="text"">
tmp1:<INPUT id="tmp1" onfocus="recordlast(last, this);" type="text" onchange="retsetMe(this);calculate(obj, last, this);"
value="0"> tmp2:<INPUT id="tmp2" onfocus="recordlast(last, this);" type="text" onchange="retsetMe(this);calculate(obj, last, this);"
value="0">
</form>
</body>
</HTML>

解决方案 »

  1.   

    那就在onchange里把总和计算出来,就不用那个onpropertychange了
      

  2.   

    问题是当用户更改了某个tmp后,直接点其它某个按钮提交页面,这时显示的总和就和实际各tmp的加总值不一致...
      

  3.   

    <script language="JavaScript">
    <!--
    function add()
    {
    document.getElementById('c').value = Number(document.getElementById('a').value) + Number(document.getElementById('b').value);
    }
    //-->
    </script>
    <input type="text" id="a" onchange="add();" onkeypress="add();" onkeyup="add();"><input type="text" id="b" onchange="add();" onkeypress="add();" onkeyup="add();"><input type="text" id="c">
      

  4.   

    问题解决了,其实很简单,每次改变都重算一遍就行了;这样虽然笨点但很实用:
    -----------------------------------------------------------
    .aspx:
    <script language=javascript>
    function calculate(obj,tmp){
    resetMe(tmp);
    var ret=0;
    var tmps=document.getElementById('Table1').getElementsByTagName("input");
    for(var i=0; i<tmps.length; i++){ret = ret -(- tmps[i].value);}
    obj.value=ret;
    }function resetMe(tmp){
    if(isNaN(tmp.value)){tmp.value=0}
    }
    </script>.vb
    If Not IsPostBack Then
        Dim script As String
        
        script = "calculate(objs, this);"
        tmp0.Attributes.Add("onpropertychange", script)
        tmp1.Attributes.Add("onpropertychange", script)
       ...    script = "this.select();"
        tmp0.Attributes.Add("onfocus", script)
        tmp1.Attributes.Add("onfocus", script)
      
    End If
      

  5.   

    对了我的文本框还有长度的限制:
    <INPUT type="text" id="tmp0" runat="server" value=0 maxlength=7>
    <INPUT type="text" id="tmp1" runat="server" value=0 maxlength=7>