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

まず、これはフォームの誤用のように見えることを指摘しておきます。フォーム要素の名前が「question_1」ではなく「answer1」であり、オプションの名前が「question_1」ではなく「q1_option」であり、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 に答える