function Cal(obj) { var tr=obj.parentNode.parentNode; var num=tr.cells[1].firstChild; var pri=tr.cells[2].firstChild; var otherpri=tr.cells[3].firstChild; var pattem=/^\d+(\.\d+)?$/; var sum=0;
是的。。但是为什么后面的值也要显示出来呢。。我明明没有计算它啊这是为什么?JS代码如下 // JScript 文件 function Cal(obj) { var tr=obj.parentNode.parentNode; var num=tr.cells[1].firstChild; //数量 var pri=tr.cells[2].firstChild; var otherpri=tr.cells[3].firstChild; //单价 var sum=0; tr.cells[4].firstChild.value=(num.value==""?0:num.value)*(otherpri.value==""?0:otherpri.value);//价格显示出来。 var GridView1 = document.getElementById("GVSales"); for(i=1;i<GridView1.rows.length; i++) { sum=parseFloat(sum)+parseFloat(GridView1.rows[i].cells[4].getElementsByTagName("input")[0].value); //总价显示为什么直到执行最后一个循环才显示出值,,别的全是显示的NaN document.getElementById("txtYSMoney").value=sum; }
你不可能指望“纯高手”去给你做这种体力活吧 ^0^!
1种 触发事件后,获取dom,然后查找parent一直查到tr未知
然后递归遍历tr的dom查找textbox
第二种是第一种的改进,因为向上查找parent比较麻烦,所以可以给每个textbox加上一个标记,比如className=“mytext+行索引”然后触发以后获取当前textbox的classname,根据这个classname获取同一行的所有textbox
添加onkeyup,获取当前行数据实现计算
http://topic.csdn.net/u/20090411/14/995dadd2-e45e-47ea-8ab9-a583f86024df.html
那就用服务器方法吧!编辑模式下,选中文本框所在列,点右键,选择"编辑模板",选择要编辑的模板,再选文本框,在文本框的事件中,选择ONTEXTCHANGE,
再在ONTEXTCHANGE事件中写代码:
/// <summary>
/// 表格中的物料代码改变事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void txtItemNo_TextChanged(object sender, EventArgs e)
{
TextBox tb = sender as TextBox;
int index = (tb.NamingContainer as GridViewRow).RowIndex;
TextBox txtIsChanged = this.dgDetail.Rows[index].FindControl("txtIsChanged") as TextBox;
TextBox txtDetailId = this.dgDetail.Rows[index].FindControl("txtdgDetailId") as TextBox;
txtIsChanged.Text = "1";
string strItemNo = tb.Text.Trim();
string strDetailId = txtDetailId.Text.Trim(); StDetail sod = GetMaterialInfo(strItemNo); if (sod == null)
{
strFailedMessage = "物料数据不存在!";
ScriptManager.RegisterStartupScript(this, this.GetType()
, "myerrorscript", "alert('" + strFailedMessage + "');", true);
return;
} bool flag = UpdateDetailInfo(strDetailId, sod); if (!flag)
{
strFailedMessage = "此记录数据不存在!"; ScriptManager.RegisterStartupScript(this, this.GetType()
, "myerrorscript", "alert('" + strFailedMessage + "');", true);
}
}
{
var tr=obj.parentNode.parentNode;
var num=tr.cells[1].firstChild;
var pri=tr.cells[2].firstChild;
var otherpri=tr.cells[3].firstChild;
var pattem=/^\d+(\.\d+)?$/;
var sum=0;
document.getElementById("txtYHMoney").value=(num.value==""?0:num.value)*(otherpri.value==""?0:otherpri.value)-(num.value==""?0:num.value)*(pri.value==""?0:pri.value)*(otherpri.value==""?0:otherpri.value)*0.1;//
document.getElementById("txtYKMoney").value=(num.value==""?0:num.value)*(pri.value==""?0:pri.value)*(otherpri.value==""?0:otherpri.value)*0.1;//
tr.cells[4].firstChild.value=(num.value==""?0:num.value)*(otherpri.value==""?0:otherpri.value);
var table =document.getElementById("GVSales");
var t=table.getElementsByTagName("tr");
var cellNum = 3 //第4列
for(i =1;i<t.length;i++)
{
if(pattem.test(tr[i].getElementsByTagName("td")[4].getElementsByTagName("input")[0].value)!="")
a=parseFloat( tr[i].getElementsByTagName("td")[4].getElementsByTagName("input")[0].value );
else
a=0;
sum=sum+a;
}
document.getElementById("txtYSMoney").value=sum;
}
我JS能算出每一行的价格,,,就是总的金额。怎么算啊。。我的循环语句就是有问题。。我只不过想看看你们的说法。干嘛不依不饶。。
比如
单价X数量=总价
你就在单价和数量文本框的onchange事件中,写代码更新价格。
{
if(pattem.test(tr[i].getElementsByTagName("td")[4].getElementsByTagName("input")[0].value)!="")
a=parseFloat( tr[i].getElementsByTagName("td")[4].getElementsByTagName("input")[0].value );
else
a=0;
sum=sum+a;
}
document.getElementById("txtYSMoney").value=sum;
}这句话有问题JS出错。。帮帮忙看一下吧。。
我相信楼主应该懂得JS取得各控件的引用吧,OK,至于计算什么的,更不在话下,呵呵onchange事件吧,这个在你的焦点离开元素后,自动触发的
// JScript 文件
function Cal(obj)
{
var tr=obj.parentNode.parentNode;
var num=tr.cells[1].firstChild; //数量
var pri=tr.cells[2].firstChild;
var otherpri=tr.cells[3].firstChild; //单价
var sum=0;
tr.cells[4].firstChild.value=(num.value==""?0:num.value)*(otherpri.value==""?0:otherpri.value);//价格显示出来。
var GridView1 = document.getElementById("GVSales");
for(i=1;i<GridView1.rows.length; i++)
{
sum=parseFloat(sum)+parseFloat(GridView1.rows[i].cells[4].getElementsByTagName("input")[0].value);
//总价显示为什么直到执行最后一个循环才显示出值,,别的全是显示的NaN
document.getElementById("txtYSMoney").value=sum;
}
}
这句放在循环外面试下