开发者社区> 问答> 正文

JS动态新增多行,删除一行后.再新增.给表单赋的值就出错了.高手帮看一下啊!!? 报错

JS动态新增多行,删除一行后.再新增.给表单赋的值就出错了.高手帮看一下啊!!? 400 报错

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<script language="javascript">
function   check() {
        var newTr = table2.insertRow();
        var newTd01 = newTr.insertCell();
        var newTd02 = newTr.insertCell();

        var table = document.getElementById("table2");
        var num = table.rows.length;
        var i = num-1;
        var x = i-1
        var sp_bianma="sp_bianma"+x;
      
 

  table.rows[i].cells[0].innerHTML = "<input type='button' value='删除'onClick='del(this);'/>"+x+"";
  table.rows[i].cells[1].innerHTML = "<input type='text' name='"+sp_bianma+"' id='"+sp_bianma+"'/>";
  xu();
  document.getElementById(""+sp_bianma+"").value = x;
   }

 

function del(obj){
   var m = obj.parentElement.parentElement.rowIndex;
   var table1 = document.getElementById("table2");

   table1.deleteRow(m);
   xu();
}
  
  
function xu(){ 
   var table = document.getElementById("table2");
   var num = table.rows.length;
   for(xx=1;xx<num-1;xx++){
   i = xx +1
   table.rows[i].cells[0].innerHTML = "<input type='button' value='删除'onClick='del(this);'/>"+xx+"";
   table.rows[i].cells[1].getElementsByTagName("input")[0].name = "sp_bianma"+xx;
   table.rows[i].cells[1].getElementsByTagName("input")[0].id = "sp_bianma"+xx;
   }
   }
   </script>
<body>
<input name="" type="button" onClick="check()" />
<table width="200" border="2" cellpadding="1" id="table2" name="table2">
    <tr>
    <td width="44">序号</td>
    <td width="168">商品编号</td>
  </tr>
</table>
</body>
</html>

展开
收起
优选2 2020-06-04 21:20:31 677 0
1 条回答
写回答
取消 提交回答
  • 兄弟,别的不说了,你能给添加个注释吗?那里是给表单赋值的方法啊??######好乱的代码######

    你这样只能在IE下运行,都不符合W3C标准。inserRow和inserCell需要加一个下标参数,不然非IE浏览器跑不起来。

    实际情况也是这样,我试了IE下正常,其它浏览器报错。

    ######谁能帮整一下不啊!我实在弄不好了######删除中间一个,再新增,就没值???######是的啊!弄了很久都搞不定 帮帮忙吧######

    你从0开始,假设你总共3个,你删除第2个,那么,那么新增的,id是多少?是“sp_bianma2”,而id为这个的,你前面已经创建过,就是没删除前的第三个。那么,你赋值的时候,由于有2个id一样的,js只会取你前面那个,所以,你后面新建的这个id重复的,就会没赋值!
    计算x的时候,不要根据你的行数去,和你前面的序号区分开,你可以弄个一直增加的全局变量,不要取值重复就好了。
    序号是序号,id和值是要变的,不要回去了!

    ###### xu();的函数就是刷新删除后的ID,使ID自动上移.不知道错在哪######我上面已经说了。######检查过了,删除第二行,第三行的ID会改成sp_bianma2.######为什么出错和怎么改,我告诉你了,自己改去。这代码我看到头大。######计算id和赋值的时候,不要用你的x,因为你的x是根据行数来的,这样删除了,会导致重复!!!!######这个我前面已经说过了,删除第二行,那么,原先的第三行变成第二行,而且id是"sp_bianma2"!! 你接着新建第三行,照你的算的,id也是“sp_bianma2”!js赋值的时候,只会取到前面的,不会给你新的这个赋值!######谢谢大家
    2020-06-05 11:54:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript异步编程 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载