我目前正在通过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>
答案 0 :(得分: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);