使用javascript动态添加输入字段,这些字段是什么';参数名称?
我使用在internet上找到的以下示例动态构建输入字段列表 它似乎工作得很好,但是当我提交表单时,我应该使用参数名称来放置来自HttpServletRequest的数据吗 谢谢,罗伯使用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
<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);