id只能一个页面有一个相同的值,你放到forEach循环里面,页面出现了多个,只有第一个有用,因此 下面的都是无效的
你应该
把每个id都加上序号,如
<c:forEach items="${signBusList}" var="sign" varStatus="xh">
如<tr id="no${xh.index}"></cforEach>

解决方案 »

  1.   

    可以在calculate()中传入${check.stock_number}和this作参数,通过this.value得到盘点数量,至于损益数量的input可以给它设定相同的class得到,这样即使表格改动也没影响
      

  2.   

    你在构建表格的时候,应该给每一行的单元格的id都加上行号,这样的话保证id唯一,然后在计算损益的时候,通过id获取元素的时候就唯一了。
      

  3.   

    下面这种方式可以不用id,但是对浏览器有一定要求
    ie下可以,ff就不行了  <TABLE id="tab" border="1">
      <TR>
    <TH>名称</TH>
    <TH>数量</TH>
    <TH>盘点</TH>
    <TH>损益</TH>
      </TR>
      </TABLE>
    var tab = document.getElementById("tab");\
    //模拟从数据库中取数据画表格
    var arr = [["商品1",2000], ["商品2",500]];
    for (var i=0; i<arr.length; i++)
    {
    var newrow = tab.insertRow();
    var newcell = newrow.insertCell();
    newcell.innerHTML = arr[i][0]; //名称
    newcell = newrow.insertCell();
    newcell.innerHTML = arr[i][1]; //数量
    newcell = newrow.insertCell();
    newcell.innerHTML = "<input type='text' onchange='fun(this)'>";  //盘点
    newcell = newrow.insertCell();
    newcell.innerHTML = "<input type='text'>"; //损益
    }
    //计算
    function fun(obj) {
    //损益是盘点input(obj)的父元素(parentNode)的下个兄弟元素(nextSibling)的第一个子元素(childNodes[0])
    var sy = obj.parentNode.nextSibling.childNodes[0];
    sy.value = parseInt( obj.parentNode.previousSibling.innerHTML ) - obj.value;
    }
      

  4.   

    页面中有同样的id  只能取第一个id的值  ,
    这里要么在tr用class + 编号  或者通过 tr 的下标
      

  5.   


    如果这样的话,它这个id怎么调用?
    还这样吗:var index = document.getElementById("no${index}").innerHTML;
    如果这样的话,${index}是读不出来的。
    运行结果还是只能读取第一行的数据。