チェックされたすべてのチェックボックスをループしてから、同じフォームに同じ応答を再入力する関数を freemarker に書いています。フォームはフリーマーカー形式で、JS を使用して、チェックボックスを含むカテゴリごとに個別の配列を作成しています。以下のコード:
HTML:
<input type="checkbox" class="checkBox" value="United Kingdom" name="holidays" />
<input type="checkbox" class="checkBox" value="Australia" name="holidays" />
<input type="checkbox" class="checkBox" value="United States" name="holidays" />
<input type="checkbox" class="checkBox" value="Asia" name="holidays" />
<input type="checkbox" class="checkBox" value="United Kingdom" name="flights" />
<input type="checkbox" class="checkBox" value="Australia" name="flights" />
<input type="checkbox" class="checkBox" value="United States" name="flights" />
<input type="checkbox" class="checkBox" value="Asia" name="flights" />
JS:
var extraObjs = {};
if(validated) {
$(formRef).find('input[type=text],input[type=password]').each(function() {
var obj = $(this);
extraObjs[obj.attr('name')] = obj.val();
});
$(formRef).find('input[type=radio]:checked, input[type=checkbox]:checked').each(function() {
var obj = $(this);
if(obj.is('[type="checkbox"]')) {
if(typeof extraObjs[obj.attr('name')] !== 'object') {
extraObjs[obj.attr('name')] = [];
}
extraObjs[obj.attr('name')].push(obj.val());
} else {
extraObjs[obj.attr('name')] = obj.val();
}
});
return extraObjs;
} else {
return false;
}
問題は、情報が POST を介して送信されると、表示される結果が次のようになることです。
flights[] ["United Kingdom", "Asia"]
holidays[] ["United Kingdom", "Asia"]
余分なブラケットが問題を引き起こしているようです