2014-07-07 83 views
0

我有一个带有按钮的表单,该按钮将动态添加一组具有相同表单的输入。将具有相同名称的单选按钮传递给servlet

我已经设法完成,除了一个问题。

我无法每次添加字段时将相同名称的无线电输入类型的参数传递给servlet。它只将值传递给servlet一次。奇怪的是,我可以成功传递文本输入类型。

或者是否有任何其他方式将值从单选按钮传递给servlet?

下面的代码:

<script type="text/javascript"> 
$(document).ready(function(){ 
var counter = 2; 

$("#addDynamicDivs").click(function() { 
var newTextBoxDiv1 = $(document.createElement('div')) 
.attr("id", 'TextBoxDiv1'); 
newTextBoxDiv1.attr("style",'float: left;'); 

var newTextBoxDiv2 = $(document.createElement('div')) 
.attr("id", 'TextBoxDiv2'); 
newTextBoxDiv2.attr("style",'float: left;'); 

var newTextBoxDiv3 = $(document.createElement('div')) 
.attr("id", 'TextBoxDiv3'); 
newTextBoxDiv3.attr("style",'float: left;'); 

var newTextBoxDiv4 = $(document.createElement('div')) 
.attr("id", 'TextBoxDiv4'); 
newTextBoxDiv4.attr("style",'float: left;'); 

newTextBoxDiv1.after().html('<label>Speaker Name : </label>' + 
    '<input type="text" name="speakername" id="speakername" value="" >'); 

    newTextBoxDiv2.after().html('<label>Speaker Country : </label>' + 
    '<input type="text" name="speakercountry" id="speakercountry" value="" >'); 

    newTextBoxDiv3.after().html('<label>Speaker Company : </label>' + 
    '<input type="text" name="speakercompany" id="speakercompany" value="" >'); 

    newTextBoxDiv4.after().html('<label>ID Type: </label>' + 
    '<ul name="idtype class="forms-list">'+ 
    '<li><input type="radio" name="idtype" id="idtype" value="New ID">'+ 
    '<label for="New ID">New ID</label></li>'+ 
    '<li><input type="radio" name="idtype" id="idtype" value="Old ID">'+ 
    '<label for="Old ID">Old ID</label></li></ul>'); 

    newTextBoxDiv1.appendTo("#TextBoxesGroup"); 
    newTextBoxDiv2.appendTo("#TextBoxesGroup"); 
    newTextBoxDiv3.appendTo("#TextBoxesGroup"); 
    newTextBoxDiv4.appendTo("#TextBoxesGroup"); 


}); 

});

从servlet,参数由该代码检索到:

String[] speakername = request.getParameterValues("speakername"); 
String[] speakercountry = request.getParameterValues("speakercountry"); 
String[] speakercompany = request.getParameterValues("speakercompany"); 
String[] idtype   = request.getParameterValues("idtype"); 

打印出上述各字符串数组的长度,和我2为每个参数的除了idtype其长度是1.

所有的动态参数已包含在窗体内。

回答

1

单选按钮通常只会将请求发送出组中的一个值。按照设计,只能从组中选择一个单选按钮。如果您向表单添加更多具有相同名称的单选按钮,则当您提交表单时,浏览器仍应仅传递该组的所选值。

如果您希望传递多个此表单,您最好区分动态添加的表单(它看起来像要将所有数据一起发送,因此您需要添加一个唯一标识符到每个<input>元件的名称,但是另外将它们分开为<form>将是优选的)。我不会建议依靠浏览器在同一个<form>中传递多个<input> s和name

+0

我同意。另一种方法是在每个组的字段名称末尾添加一个索引,例如, idtype0,idtype1等 –

+0

谢谢@Neo Kabuto。基本上这些输入字段将按用户需要动态添加。我使用其他名称重命名了输入,但仅在添加一次输入时才起作用。 添加索引是一个好主意,但我如何在动态添加元素上做到这一点? – user3790782

+0

@ user3790782您可能只想使用最简单的解决方案,并拥有一个全局变量,用于跟踪您添加的输入组的数量。然后,您只需要更改代码,将该值插入到您添加到文档中的每个“”的“名称”的末尾。 –

相关问题