0

我目前正在通过 ajax 提交一个表单并传入一个手动创建的数据变量,看起来有点像这样:

var data = 'answer1='
    + $("input[name=question_1]:checked").val()
    + '&q1_option=' + $("input[name=question_1]:checked").attr("id")

这在整个表单元素列表中继续存在,明显递增 question_2、question_3 等。问题是这有点混乱。我想使用 jQuery serializeArray 但是,为此我需要传入一个额外的参数。我需要传递输入值和输入 id,因为该 id 在数据中使用。

有没有办法使用 jQuery serializeArray() 来实现这一点?

示例表单标记:

<label>What is your gender?<span class="required"> *</span></label>
<input id="1" type="radio" name="question_1" value="Male"><label class="standard" for="1">Male</label><br>
<input id="2" type="radio" name="question_1" value="Female"><label class="standard" for="2">Female</label><br>
<label>How old are you?<span class="required"> *</span></label>
<input id="3" type="radio" name="question_2" value="Under 25"><label class="standard" for="3">Under 25</label<br>
<input id="4" type="radio" name="question_2" value="25-29"><label class="standard" for="4">25-29</label><br>
<input id="5" type="radio" name="question_2" value="30-39"><label class="standard" for="5">30-39</label><br>
<input id="6" type="radio" name="question_2" value="40-49"><label class="standard" for="6">40-49</label><br> 
<input id="7" type="radio" name="question_2" value="50-59"><label class="standard" for="7">50-59</label><br>
<input id="8" type="radio" name="question_2" value="60+"><label class="standard" for="8">60+</label><br>                        
4

1 回答 1

1

首先,让我指出,这看起来像是对表格的滥用。如果表单元素的名称将是“answer1”而不是“question_1”,并且如果您的选项将被命名为“q1_option”而不是“question_1”,并且如果您访问它们的值而不是它们的 id,那么您将能够以简单的单行方式将表单序列化,本质上,这就是要传达的name意思value

话虽如此,$.serializeArray产生一个键/值对数组。很难看出您$.serializeArray在特定场景中想要做什么。如果你想要这样一个数组,你可以自己构造它:

var keyValuePairs = [];

keyValuePairs.push({ name: 'answer1', value: $('input[name=question_1]:checked').val() })

var options = $('input[name^="question_"]:checked');    
for(var i = 0; l = options.length; i < l; i++) {
   keyValuePairs.push({ 
      name: 'q' + i + '_option', 
      value: options.get(i).attr('id')
   });
}

给定这样一个数组,您可以将其序列化为示例中的字符串,使用

var data = $.param(keyValuePairs);
于 2012-09-24T13:44:02.123 回答