如题。源码如下。当我点击表格时获得当强行号和总的行数。如果当前行号等于总的行数,就添加一个新行。如果不是,则进行输入数据处理。现在是添加的行显示不出来。不知为什么?请各位老大不吝赐教指点指点。万方感谢!<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>无标题文档</title>
<%@ page contentType="text/html; charset=GB2312" %>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="/hp.css" type="text/css">
<jsp:useBean id="MacIP" scope="session" class="bruce.MacIP.MacIP"/>
<jsp:useBean id="Jodb" scope="session" class="bruce.Jodb.Jodb"/>
<style>   
  td{   font-family:   Courier   New;   font-size:   12px;   text-align:   center   ;height:30;word-break:break-all;background-color:#d3e8ff}   
  textarea.content{   font-family:   Courier   New;   font-size:   12px;height:expression(this.scrollHeight);overflow:hidden;border:1   solid   #3366cc;width:98%;}   
  </style>   </head><body>
<script>

function findObj(theObj, theDoc)

var p, i, foundObj; 
if(!theDoc) theDoc = document; 
if( (p = theObj.indexOf("?")) > 0 && parent.frames.length) 
{    theDoc = parent.frames[theObj.substring(p+1)].document;    theObj = theObj.substring(0,p); } if(!(foundObj = theDoc[theObj]) && theDoc.all) foundObj = theDoc.all[theObj]; for (i=0; !foundObj && i < theDoc.forms.length; i++)     foundObj = theDoc.forms[i][theObj]; for(i=0; !foundObj && theDoc.layers && i < theDoc.layers.length; i++)     foundObj = findObj(theObj,theDoc.layers[i].document); if(!foundObj && document.getElementById) foundObj = document.getElementById(theObj);    return foundObj;
}
//添加一个参与人填写行
function AddSignRow(){ //读取最后一行的行号,存放在txtTRLastIndex文本框中 
var txtTRLastIndex = findObj("txtTRLastIndex",document);
var rowID = parseInt(txtTRLastIndex.value);var signFrame = findObj("SignFrame",document);
//添加行
//var newTR = signFrame.insertRow(signFrame.rows.length);
//var newTR = signFrame.insertRow(signFrame.rows.length);
rowID=signFrame.rows.length-1;
var newTR = signFrame.insertRow(signFrame.rows.length);
//newTR.id = "SignItem" + rowID;
newTR.style.display='block';
alert("add Row  "+rowID);
//添加列:楼层编号
//var BuilddingNo=newTR.insertCell(0);
var BuilddingNo=document.createElement("td");
BuilddingNo.innerHTML = "<textarea   row=1   class='content'   onblur='setV(this)'   id='Me'>"+e.innerText+"</textarea>";
//添加列:房间编号
//var RoomNo=newTR.insertCell(1);
var RoomNo=document.createElement("td");
RoomNo.innerHTML = "<textarea   row=1   class='content'   onblur='setV(this)'   id='Me'>"+e.innerText+"</textarea>";
//添加列:房屋面积
//var RoomArea=newTR.insertCell(2);
var RoomArea=document.createElement("td");
RoomArea.innerHTML ="<textarea   row=1   class='content'   onblur='setV(this)'   id='Me'>"+e.innerText+"</textarea>";
//添加列:房屋价值
//var ZCValue=newTR.insertCell(3);
var ZCValue=document.createElement("td");
ZCValue.innerHTML ="<textarea   row=1   class='content'   onblur='setV(this)'   id='Me'>"+e.innerText+"</textarea>";
//将行号推进下一行
txtTRLastIndex.value = (rowID + 1).toString() ;
}
//删除指定行
function DeleteSignRow(rowid){
var signFrame = findObj("SignFrame",document);
var signItem = findObj(rowid,document);//获取将要删除的行的Index
var rowIndex = signItem.rowIndex;//删除指定Index的行
signFrame.deleteRow(rowIndex);//重新排列序号,如果没有序号,这一步省略
for(i=rowIndex;i<signFrame.rows.length;i++){
signFrame.rows[i].cells[0].innerHTML = i.toString();
}
}//清空列表
function ClearAllSign(){
if(confirm('确定要清空所有参与人吗?')){
var signFrame = findObj("SignFrame",document);
var rowscount = signFrame.rows.length;//循环删除行,从最后一行往前删除
for(i=rowscount - 1;i > 0; i--){
   signFrame.deleteRow(i);
}//重置最后行号为1
var txtTRLastIndex = findObj("txtTRLastIndex",document);
txtTRLastIndex.value = "1";//预添加一行
AddSignRow();
}
}
   
  function   dataEdit(tableObj){ 
 var txtTRLastIndex = findObj("txtTRLastIndex",document);
var LastrowID = parseInt(txtTRLastIndex.value);

var signFrame = findObj("SignFrame",document);
var RowCount=signFrame.rows.length-1;

//获取将要删除钡男械捻Index
var rowIndex = event.srcElement.parentElement.rowIndex ;  var   e=event.srcElement  
  alert("RowCount="+RowCount+",\n    CurRow="+rowIndex);
  if(rowIndex==RowCount)
  {
    AddSignRow();
    return;
    
  }
  if(e.tagName!="TD")return;   
  e.innerHTML="<textarea   row=1   class='content'   onblur='setV(this)'   id='Me'>"+e.innerText+"</textarea>"   
  Me.focus(); 
}   function   setV(o){   
  o.parentElement.innerText=o.value   
  } 
  
  </script> 
 
<div>
      <div>
        <div align="left">国有资产:</div>
        
        <div align="left" style="margin:3px;padding: 3px;width:100%;border-width: 2px; border-color: black;border-style:double;">
          <div style="border-width: 2px; padding: 3px;width:100%;border-color: black;border-style:double;" >
          <label style="margin:3px;border-width: 2px; border-color: blue;border-style:double;background-color:blue;color:white;">房屋资产 </label>
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">设备资产 </label> 
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">设施资产 </label>
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">资源资产 </label>
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">土地资源资产 </label>
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">森林资源资产 </label>
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">矿产资源资产 </label>
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">海洋资源资产 </label>
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">大气资源资产 </label><br><br>
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">太空资源资产</label>
          </div>
          <div style="margin:3px;padding: 3px;width:100%;border-width: 2px; border-color: black;border-style:double;">
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;background-color:blue;color:white;">办公用房 </label>
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">住宅用房 </label> 
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">生产用房 </label>
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">商业经营用房 </label>
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">出租用房 </label>
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;">闲置用房 </label>
          </div>
          <div style="margin:3px;padding: 3px;width:100%;border-width: 2px; border-color: black;border-style:double;">
          <label style="margin:3px;border-width: 2px; border-color: black;border-style:double;background-color:blue;blue;color:white;">办公用房 </label>
          </div>      
        </div>
      </div>
      
      <div align="left" style="margin:3px;padding: 3px;width:100%; height:335px;border-width: 2px; border-color: black;border-style:double;">
      <table id="SignFrame" name="fwzctable" class="fwzctable" width="100%" border="1" onclick="dataEdit(this)" >
  <tr>
    <th scope="col">楼层编号</th>
    <th scope="col">房间编号</th>
    <th scope="col">房屋面积(平方米)</th>
    <th scope="col">房屋价值(万元)</th>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>  <tr id="SignItem6">
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr">
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr></table>      <div align="right">单位共有资产总价值:<input name="" type="text" readonly="true" value="                 "/>万元人民币</div>
  </div>
</div>
  
  <div><input name="" type="button" value="上报提交" /><input name="" type="button" value="保存" /><input name="" type="button" value="打印" /><input name="" type="button" value="取消" /><input name='txtTRLastIndex' type='hidden' id='txtTRLastIndex' value="9" /></div>
</div></body>
</html>

解决方案 »

  1.   

     楼上,感谢你的回复。
    不过e我有定义啊
      var e=event.srcElement 
    就在函数EditData()中。你可以把我的源码拷贝下来,存为HTML文件,在本地运行,允许脚本就行,肯定能行,点击表格为显示相应内容。但就是添加一行后,添加的行显示不出来。
    我的初衷是想做成全屏编辑表格,提交时,将整张表格数据提交到数据库中。有老大帮忙看一下,问题处在哪里?
      

  2.   

    楼主在ff运行下看看firebug报什么错,这样就可以了
      

  3.   

      function dataEdit(tableObj,e){  
     var txtTRLastIndex = findObj("txtTRLastIndex",document);
    var LastrowID = parseInt(txtTRLastIndex.value);var signFrame = findObj("SignFrame",document);
    var RowCount=signFrame.rows.length-1;//这两行ie与标准的事件机制不同
        var e=window.event || arguments.callee.caller.arguments[0];
        var ss=e.srcElement || e.target;
    //获取将要删除钡男械捻Index
    var rowIndex=(ss).parentNode.rowIndex
    //var rowIndex = event.srcElement.parentElement.rowIndex ;  //alert("RowCount="+RowCount+",\n CurRow="+rowIndex);
      if(rowIndex==RowCount)
      {
      AddSignRow();
      return;
        
      }
      if(ss.tagName!="TD")return;   //这里非ie用textContent,其它的你自己改吧,Me.focus()这种要使用getElementById来查找才行,parentElement换成parentNode
      ss.innerHTML="<textarea row=1 class='content' onblur='setV(this)' id='Me'>"+(ss.innerText?ss.innerText:ss.textContent)+"</textarea>"   
      Me.focus();  
    }  
      

  4.   

    感谢5楼的回复。照你的方法,在表格的onclick事件中该如何引用这个dataEdit(theobj,e)呢?我是写成onclick="dataEdit(this,this.event )",最初的9行表格都能正常编辑数据,只是第九行时,在表尾插入的那一行,怎么也显示不出来,整个表格看起来还是只有9行。用rows.length得到数目也是10行啊,真郁闷...
      

  5.   

    用FIREFOX浏览器,效果也是一样。
      

  6.   

    已解决!把上面的AddSignRow()函数改为如下:
    function AddSignRow(){ //读取最后一行的行号,存放在txtTRLastIndex文本框中 
    var txtTRLastIndex = findObj("txtTRLastIndex",document);
    var rowID = parseInt(txtTRLastIndex.value);var signFrame = findObj("SignFrame",document);
    //添加行
    //var newTR = signFrame.insertRow(signFrame.rows.length);
    //var newTR = signFrame.insertRow(signFrame.rows.length);
    rowID=signFrame.rows.length-1;
    var newTR = signFrame.insertRow(signFrame.rows.length);
    //newTR.id = "SignItem" + rowID;
    //newTR.style.display='block';
    //alert("add Row  "+rowID);
    //添加列:楼层编号
    var BuilddingNo=newTR.insertCell(0);
    BuilddingNo.innerHTML ="&nbsp;"; 
    //添加列:房间编号
    var RoomNo=newTR.insertCell(1);
    RoomNo.innerHTML = "&nbsp;";
    //添加列:房屋面积
    var RoomArea=newTR.insertCell(2);
    RoomArea.innerHTML ="&nbsp;";
    //添加列:房屋价值
    var ZCValue=newTR.insertCell(3);
    ZCValue.innerHTML ="&nbsp;";
    //将行号推进下一行
    txtTRLastIndex.value = (rowID + 1).toString() ;
    }关键是要让innerHTML ="&nbsp;";
    再次感谢各位指点!