我需要的是一个非常标准的功能。而且我确信它很容易,但不知怎的,我无法实现它。请帮帮我。
这是方案 - >
我在jsp上有一个struts表单,它接收员工信息。现在我想和每个员工联系一些家庭成员。
因此,对于我想要的家庭成员的信息:
1。)一行 - 1个选择元素和3个文本字段元素 - 在表单的末尾。
2。)“添加”按钮,根据需要添加这些行以添加更多家庭成员。
我不知道如何附上屏幕截图来准确了解我想要的内容。
我尝试过这样做,使用javascript,但javascript添加了标准的HTML元素,因为我无法访问我的动作类中这些字段的值。(请告诉我,如果不是这样,因为然后唯一的问题是,为什么我无法访问这些值?
目前正在尝试的内容:
JSP:
<s:form name="enterEmployeeInfo" id="enterEmployeeInfo" action="enterEmployeeInfo">
////OTHER FORM ELEMENTS//////////////
<table>
<tr>
<td>Relationship</td>
<td>Name</td>
<td>Age</td>
<td>Occupation</td>
</tr>
<tr>
<td>
<select name="rel">
<option value=""></option>
<option value="Father">Father</option>
<option value="Mother">Mother</option>
<option value="Spouse">Spouse</option>
<option value="Child">Child</option>
</select>
</td>
<td> <input name="rName[]"/></td>
<td> <input name="rAge"/> </td>
<td> <input name="rOccupation"/> </td>
<td colspan="4" align="right"><button type="button" onclick="tryFunc(this.parentNode);">Add</button></td>
</tr>
</table>
<s:submit value="Add Employee" name="submit"/>
<s:reset value="Reset" name="reset"/>
</s:form>
JS:
function tryFunc(node){
var root = node.parentNode.parentNode;
var allRows = root.getElementsByTagName('tr');
var cRow = allRows[1].cloneNode(true);
var cInp = cRow.getElementsByTagName('input');
for(var i=0;i<cInp.length;i++){
cInp[i].setAttribute('name',cInp[0].getAttribute('name')+'_'+(allRows.length+1))
}
var cSel = cRow.getElementsByTagName('select')[0];
cSel.setAttribute('name',cSel.getAttribute('name')+'_'+(allRows.length+1));
root.appendChild(cRow);
}
有了这个,我可以添加一行新的指定元素,但无法访问动作类中的字段值。我想指出,我甚至无法访问动作类中的第一行元素(可能是因为它们是标准HTML)。
感谢任何帮助。
谢谢!
答案 0 :(得分:1)
这是问题的解决方案,对于那些仍然困在它上面的人。
在jsp中:
<s:form name="enterEmployeeInfo" id="enterEmployeeInfo" action="enterEmployeeInfo">
////OTHER FORM ELEMENTS//////////////
<table>
<tr>
<td align="center">Relationship</td>
<td align="center">Name</td>
<td align="center">Age</td>
<td align="center">Occupation</td>
</tr>
<tr>
<td>
<select name="rel">
<option value=""></option>
<option value="Father">Father</option>
<option value="Mother">Mother</option>
<option value="Spouse">Spouse</option>
<option value="Child">Child</option>
</select>
</td>
<td> <input name="rName"/></td>
<td> <input name="rAge"/> </td>
<td> <input name="rOccupation"/> </td>
</tr>
<tr>
<td colspan="4" align="right"><button type="button" onclick="tryFunc(this.parentNode);">Add</button></td>
</tr>
</table>
<s:submit value="Add Employee" name="submit"/>
<s:reset value="Reset" name="reset"/>
</s:form>
JS:
function tryFunc(node){
var root = node.parentNode.parentNode;
var allRows = root.getElementsByTagName('tr');
var cRow = allRows[1].cloneNode(true);
root.appendChild(cRow);
}
然后在动作类中,只需定义如下变量:
private String rel[];
private String rName[];
private String rAge[];
private String rOccupation[];
定义他们的getter和setter,你可以像这样访问jsp中每行的每个元素:
rel[0], rel[1], ........
rName[0],rName[1], .......
etc......
至于将select元素的值复制到克隆行,其简单的javascript。就这样做:
clonedSelect.selectedIndex = original.selectedIndex;
如果您仍有问题,请发表评论。 :)