Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript动态添加输入字段,这些字段是什么';参数名称?_Java_Javascript_Html_Servlets - Fatal编程技术网

使用javascript动态添加输入字段,这些字段是什么';参数名称?

使用javascript动态添加输入字段,这些字段是什么';参数名称?,java,javascript,html,servlets,Java,Javascript,Html,Servlets,我使用在internet上找到的以下示例动态构建输入字段列表 它似乎工作得很好,但是当我提交表单时,我应该使用参数名称来放置来自HttpServletRequest的数据吗 谢谢,罗伯 <HTML> <HEAD> <TITLE> Add/Remove dynamic rows in HTML table </TITLE> <SCRIPT language="javascript"> func

我使用在internet上找到的以下示例动态构建输入字段列表

它似乎工作得很好,但是当我提交表单时,我应该使用参数名称来放置来自HttpServletRequest的数据吗

谢谢,罗伯

<HTML> 

<HEAD>     
<TITLE> Add/Remove dynamic rows in HTML table </TITLE>     

<SCRIPT language="javascript">         

function addRow(tableID) {               
    var table = document.getElementById(tableID);               
    var rowCount = table.rows.length;             
    var row = table.insertRow(rowCount);               
    var cell1 = row.insertCell(0);             
    var element1 = document.createElement("input");             
    element1.type = "checkbox";             
    cell1.appendChild(element1);               
    var cell2 = row.insertCell(1);             
    cell2.innerHTML = rowCount + 1;               
    var cell3 = row.insertCell(2);             
    var element2 = document.createElement("input");             
    element2.type = "text";             
    cell3.appendChild(element2);           
}           

function deleteRow(tableID) {             
    try {             
        var table = document.getElementById(tableID);             
        var rowCount = table.rows.length;               
        for(var i=0; i<rowCount; i++) {                 
            var row = table.rows[i];                 
            var chkbox = row.cells[0].childNodes[0];                 
            if(null != chkbox && true == chkbox.checked) {                     
                table.deleteRow(i);                     
                rowCount--;                     
                i--;                 
            }               
        }             
        }catch(e) {                 
            alert(e);             
        }         
    }       
</SCRIPT> 
</HEAD> 

<BODY>

<form name="myform" action="myServlet" method="post">

    <INPUT type="button" value="Add Row" onclick="addRow('dataTable')" />       
    <INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />       
    <TABLE id="dataTable" width="350px" border="1">         
    <TR>             
        <TD><INPUT type="checkbox" name="chk"/></TD>             
        <TD> 1 </TD>             
        <TD> 
            <INPUT type="text" /> 
        </TD>         
    </TR>     
    </TABLE>   

     <input type="submit" value="Go!"/>

</form>

</BODY> 
</HTML> 

在HTML表中添加/删除动态行
函数addRow(tableID){
var table=document.getElementById(tableID);
var rowCount=table.rows.length;
var row=table.insertRow(rowCount);
var cell1=行插入单元格(0);
var element1=document.createElement(“输入”);
element1.type=“复选框”;
单元格1.附加子元素(元素1);
var cell2=行插入单元格(1);
cell2.innerHTML=rowCount+1;
var cell3=行插入单元格(2);
var element2=document.createElement(“输入”);
element2.type=“text”;
第三单元附属物(第二单元);
}           
函数deleteRow(tableID){
试试{
var table=document.getElementById(tableID);
var rowCount=table.rows.length;

对于(var i=0;i您需要为您的输入对象提供一个“name”属性(如果您的JSP没有使用name,则为“id”,但我认为name是首选名称)

试试这个:

function addRow(tableID) {               
    var table = document.getElementById(tableID);               
    var rowCount = table.rows.length;             
    var row = table.insertRow(rowCount);               
    var cell1 = row.insertCell(0);             
    var element1 = document.createElement("input");             
    element1.type = "checkbox";             
    element1.name = "chk_input";      //*** EDIT ***            
    cell1.appendChild(element1);               
    var cell2 = row.insertCell(1);             
    cell2.innerHTML = rowCount + 1;               
    var cell3 = row.insertCell(2);             
    var element2 = document.createElement("input");             
    element2.type = "text";
    element2.name = "text_input";     //*** EDIT ***
    cell3.appendChild(element2);           
}
然后您的参数将被命名为“text_input”和“chk_input”

我已经有一段时间没有使用JSP了(我想这就是HttpServletRequest的目的……),所以我不记得如何访问它们,但这些将是关键

编辑:如果您要动态添加行,我想您需要一个唯一的名称。似乎您正在跟踪行数,因此您可以执行以下操作:

 ...
 element2.name = 'text-input-' + rowCount;
 ...
然后在您的控制器中(无论处理表单的是什么),您可以使用rowCount设置一个循环(对于i..rowCount),在该循环中,您可以为表单中的每一行检查诸如“text input-”+CastToString(i)之类的键

如果您没有在表单中传递rowCount,只需添加一个名为='rowCount'的hidden类型的输入和rowCount变量的值。用户单击submit按钮时可以执行此操作,这样您就不必在每一行中更新它)


谢谢,但我可以点击我的“添加”按钮多次。每个输入都需要一个唯一的名称吗?你建议我如何处理这个问题?@Robert Hume请参见编辑:)我意识到,在我第一次回答之后,我还应该添加我编的CastToString——我只想指出,如果它不是字符串,你必须强制转换它——很久没有使用Java了。还有一个问题,using你的代码——如果我添加行(1,2,3),然后删除中间的行(1,3),然后添加另一行(1,3,3),我会得到一个重复的,对吗?有没有办法,我应该使用一个随机的六位数或其他数字来代替行数?是的,生成一个随机数(或使用某种形式的时间戳)可能是这样的。然后我猜你只是迭代所有的键…但是如果行号不在其中,那么你就不知道这是属于哪一行…可能类似于“text-{rownumber}-{random}”和“chk-{rownumber}-{random}”
form = document.getElementById('myform');
rc = document.createElement('input');
rc.type = 'hidden'
rc.value = rowCount; // make sure it's in scope!!!
form.appendChild(rc);