高级使用jQuery serializeArray()

时间:2012-09-24 13:33:55

标签: javascript jquery html ajax forms

我目前正在通过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>                        

1 个答案:

答案 0 :(得分:1)

首先,我要指出,这看起来像是滥用表格。如果表单元素的名称是“answer1”而不是“question_1”,并且您的选项将被命名为“q1_option”而不是“question_1”,并且如果您访问了他们的值而不是他们的ID,那么您将能够将表单序列化为简单的单行,并且基本上,这是namevalue旨在传达的含义。

话虽如此,$.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);