一般我处理这种问题都是先预先定义多行Input,但不是不是所有的都显示,只显示第一行,其他行设置style.display="none".当要显示下面一行时,就将下面一行的属性便一下:style.display="list-item"; 或者 style.display="";

解决方案 »

  1.   

    <script>
    function AddRow()
    {
    eTable=event.srcElement.parentElement.parentElement.parentElement.parentElement
    eTr=event.srcElement.parentElement.parentElement
    eNewTr=eTable.insertRow()
    for(i=0;i<eTr.cells.length;i++)
    {
    eNewTr.insertCell().innerHTML=eTr.cells(i).innerHTML
    }
    }
    </script>
    <table width=100%>
    <tr><td><input type=text id=text1 name=text1></td><TD><input type=text onkeypress="AddRow()" id=text2 name=text2></td></tr>
    </table>
      

  2.   

    让我先明白一下
    <input name=name1><input name=age1><input name=city1>
    中<input name=city1>回车,增加
    <input name=name2><input name=age2><input name=city2>
    然后<input name=city2>回车,再增加,是吗?
    <input name=name3><input name=age3><input name=city3>是仅限于3个还是很多?
    我的理解是否正确?
      

  3.   

    上面的代码不对input及table构成做任何要求..
      

  4.   

    <table width="98%" border="0" cellspacing="0" cellpadding="0" align="center">
    <tr>
    <form id="form1" name="form1" action="program/survey/SurveyEdit.asp" method=post>
    <td>
    <table cellspacing="0" cellpadding="4" width="100%" border="0" class="tableborder">
    <tr>
    <td bgcolor="#C7E8F8">
    <div align="center"><b>问题 1:</b> </div>
    </td>
    <td bgcolor="#C7E8F8">
    <input size="60" name="Question1" class="tableborder" onclick="alert(this.name)" onkeydown="if(event.keyCode==13) addNewQuestion()">
    </td>
    </tr>
    </table>
    <div id="__idInsertBefore"></div>
    <input type="hidden" value="1" name="newTable">
    <br />
    <div align="right" style="padding:4px">
    <input type=button onClick="addNewQuestion()" value="增加一个新问题" class="CustButton" />
    <input type="button" value="保存设置" class="CustButton">
    <input type="reset" value="重新设置"  class="CustButton">
    </div>
    </td>
    </form>
    </tr>
    </table>
    <script>
    function addNewQuestion()
    {
    document.form1.newTable.value =  parseInt(document.form1.newTable.value) + 1;
    var newItemId;
    if( (document.form1.newTable.value).length > 2 )
    {
    alert("您的调查问题总数不能超过 99 个。")
    window.location.reload();
    }newItemId = document.form1.newTable.value;var objItem = '<table cellspacing="0" cellpadding="4" width="100%" border="0" class="tableborder">';
    objItem += '  <tr>';
    objItem += '<td bgcolor="#C7E8F8">';
    objItem += '      <div align="center"><b>问题 ' + newItemId + ':</b> </div>';
    objItem += '    </td>';
    objItem += '    <td bgcolor="#C7E8F8">';
    objItem += '      <input size="60" name="Question' + newItemId + '" class="tableborder" onclick="alert(this.name)" onkeydown="if(event.keyCode==13) addNewQuestion()">';
    objItem += '    </td>';
    objItem += '  </tr>';
    objItem += '</table>';
    document.all.__idInsertBefore.insertAdjacentHTML("beforeBegin", objItem);
    document.form1.elements["Question" + newItemId].focus()
    }function showTips(obj)
    {
    obj.title=obj.value;
    }</script>
      

  5.   

    我也在做和你相同的事情,最初也想通过名称的递增来命名,但后来发现只需为其命一个名称就够了(即不用为新增的文本框命名),新增的文本框将于原来同名,这样可以通过数组来访问各文本框,例如,假设原来文本框的name为txt,如果新增了文本框,则txt.length为文本框的总数目(如果没有新增,txt.length=undefined),通过for(i=0;i<txt.length;i++){//txt[i]...}便能访问其中每一个文本框。不知我说清楚没有,如果不清楚,我可以给你代码。
      

  6.   

    to 楼上:在js中是这样,但在后台程序中好像不是这样吧?
      

  7.   

    to zz315(钟钟)
    考..自己试都不试一下在这里发表什么看法啦..也不怕误导人家
      

  8.   

    在ASP中去得一个input数组的方法是
    inputArr=split(request("inputName"),", ")
      

  9.   

    <script language=javascript>
    var n=0;
    var theRow="<input><input><input><br>";
    function addRow()
    {
      if(zz.elements[n*3+2].name==event.srcElement.name)
      /* 注意上面的判断语句,如果表单中有其他的元素,此处可能需要改动!下同。 */
      {
        zz.insertAdjacentHTML("beforeEnd",theRow);
        n++;
        zz.elements[n*3].name="a"+n;
        zz.elements[n*3+1].name="b"+n;
        zz.elements[n*3+2].name="c"+n;
      }
    }
    </script><form onkeydown="if(event.keyCode==13){event.keyCode=9;addRow();}" id=zz>
      <input name=a0><input name=b0><input name=c0><br>
    </form>
      

  10.   

    to  yonghengdizhen(情已逝-有梦又能怎样?) :说话注意点儿也干净点儿!我只是提个疑问,因为我对后台不熟。就知道乱讲,你怎么知道我没有试?上面的谁的代码比我的更精简更有效?!
      

  11.   

    修改一下,这样更通用,不会受表单中可能还有的其他元素影响了。
    ------------------------------------------------------------------<script language=javascript>
    var n=0;
    var theRow="<input><input><input><br>";
    function addRow()
    {
      if(zz.childNodes[n*3+2].name==event.srcElement.name)
      {
        zz.insertAdjacentHTML("beforeEnd",theRow);
        n++;
        zz.childNodes[n*3].name="a"+n;
        zz.childNodes[n*3+1].name="b"+n;
        zz.childNodes[n*3+2].name="c"+n;
      }
    }
    </script><form onkeydown="if(event.keyCode==13)event.keyCode=9">
      <input><br><br>
      <span id=zz onkeydown="if(event.keyCode==13)addRow()"><input name=a0><input name=b0><input name=c0><br></span>
      <br><input type=submit>
    </form>
      

  12.   

    看来你的代码的确很精简..
    在下佩服佩服..佩服得五体头地..call换个表格布局你再写写看..
    再来个<td colspan=x> <select></select></td><td><textarea></textarea><button></button></td>
    你的代码又要改不少..
      

  13.   

    1。zz315(钟钟) 的方法不错
    2。我记得lhdjk (耗子) 曾在相关问题中提到要求即能增加一行,又能删除一行,如果这样,那么按递增的顺序命名就没有必要,而且反而会带来麻烦,因为一旦用户删除的是中间某一行,递增的顺序就被打乱了,除非你再重新命名,或者只允许删除最后一行
      

  14.   

    to freefalcon(心宇)
    不错.问题可以解决..有很多方法解决..换个角度还行不行呢..至于那个命名,一再去纠缠不休实在没必要.服务端完全可以按Request.form(name)(i)的方式去访问同名表单域.删除的代码更是简单,一个deleteRow就搞定.试想,如果让你写成一个HTC  zz315(钟钟) 这位兄弟的还能不能符合要求呢??
      

  15.   

    就好像一定要用大炮打鸟一样,加个click事件加个方法,用htc?当然可以,说不准有人说你高也不一定呢。
      

  16.   

    面向对象的思想在任何一个项目中都是必要的.(因此我要提到HTC)
    不喜欢写通用性强的代码的人,打个比方来说,在软件工业中,顶多也就算个手工业者,不能算工人.更谈不上工程师.当然写着玩玩,你喜欢这么做也没人拦你..我就喜欢高射炮大蚊子.反正炮弹多.
      

  17.   

    以前写的php所生成的代码简要:<table cellspacing=1 cellpadding=1 border=0 width=100% id=t136><tbody>
    <tr bgcolor=F0F0F0><td>新图片上传</td><td><div><input type=button onclick=addNew() value=增加 class=button_index><font color=000080>(按一次增加按钮就可以上传一张图片。)</font></div></td></tr><tbody></table></form><script>
    var i=0,arr=new Array('F9F9F9','F0F0F0');
    function addNew(){
    tr=document.all.t136.insertRow();
    tr.style.backgroundColor=arr[i%2];
    tr.insertCell().innerText="图片"+(++i);
    tr.insertCell().innerHTML='<input type=file name=pic'+i+' class=border_index> <a href=javascript:void(0) onclick=del()>删除</a>'
    }
    function del(){
    var f=1;
    document.all.t136.deleteRow(window.event.srcElement.parentElement.parentElement.rowIndex);
    for(i=0;i<document.all.t136.rows.length-f;i++){
    document.all.t136.rows[i+f].cells[0].innerText="图片"+(i+1);
    document.all.t136.rows[i+f].cells[1].children[0].name="pic"+(i+1);
    document.all.t136.rows[i+f].style.backgroundColor=arr[i%2];
    }
    }
    </script>
      

  18.   

    说那句话主要是针对当初对我说那句话的人。我承认我不该那么说,这里有许多我佩服的高手,比如qiushui,自己说错了我承认,没什么。但楼上的说法不敢苟同:首先说一点,在这里讨论是想一起提高,不是比拼技术,更不是炫耀。写程序,当然要讲究通用性,组件化当然好,但也得分什么。难道写成一个简单的函数不够通用?我找不出这个例子用htc写的理由,所以我用js。你说这个其实无非就是炫耀而已(你不承认也无所谓),有什么意思呀。
      

  19.   

    <script>
    function addNewQuestion(){
    var t136=form1.all.tags("table")[0]
    var o=t136.rows(1);
    var r=t136.insertRow();
    var l=t136.rows.length
    for(i=0;i<o.cells.length;i++){
    var c=r.insertCell();
    c.innerHTML=o.cells(i).innerHTML
    try{
    c.children(0).name=c.children(0).name.replace(/\d+$/,"")+(l-1);
    c.children(0).value="";
    c.children(0).value=c.children(0).name;//调试用,可删去
    }catch(e){};
    }
    }
    </script>
      

  20.   

    将第一行的cells[i]各属性复制给新插入的行的cells[i].
    表格指为固定布局表.
      

  21.   

    不能指定为固定布局呀!!!
    因为输入的值就是不固定长度的值呀
    比如第一行可能输入为:美国
    第二行就可能是:中华人民共和国
    要让所有列的宽度能随输入的最长字符宽度增加而增加.麻烦的地方就是:加了<div></div>
      

  22.   

    关键是input的可输入区域是动态的.固定的只是它的显示尺寸而已..
    除非你希望让它作为不可编辑的.那这样的话,用input就显得没有必要了.