[英]Dynamically generated Javascript input fields are not recognized by Httpservletrequest??? ONLY in Chrome?
[英]Dynamically added input fields with javascript, what are these fields' param names?
我正在使用在 inte.net 上找到的以下示例來動態構建輸入字段列表。
它似乎工作正常,但是當我提交表單時,我是否使用參數名稱來放置來自 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>
您需要為輸入對象提供一個“名稱”屬性(如果您的 JSP 未使用名稱,則為“id”,但我相信名稱是首選)
試試這個:
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;
...
然后在您的 controller(無論處理表格的什么)中,您可以使用 rowCount 設置一個循環(對於 i.. rowcount),您可以在其中檢查表格中每一行的鍵,例如“text-input-”+ CastToString(i) .
如果您不通過表單傳遞 rowCount,只需添加一個 hidden 類型的輸入,其中包含 name='rowCount' 和 rowCount var 的值。 您可以在用戶單擊提交按鈕時執行此操作,這樣您就不必在每一行中更新它)
form = document.getElementById('myform');
rc = document.createElement('input');
rc.type = 'hidden'
rc.value = rowCount; // make sure it's in scope!!!
form.appendChild(rc);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.