0

インターネットで見つけた次の例を使用して、入力フィールドのリストを動的に作成しています。

正常に動作しているように見えますが、フォームを送信するときに、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> 
4

1 に答える 1

0

入力オブジェクトに「名前」属性を与える必要があります(または、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;
 ...

次に、コントローラー(フォームを処理するものは何でも)で、rowCountを使用してループ(i .. rowcountの場合)を設定し、フォームの各行の「text-input-」+ CastToString(i)などのキーをチェックできます.

フォームで rowCount を渡さない場合は、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);
于 2012-04-05T16:07:34.550 に答える