1

複数のチェックボックスが同じ名前を持つフォームでチェックボックスをシリアル化しようとしています。

<input name="mycheckbox" type="checkbox" value="A"/>A</br>      
<input name="mycheckbox" type="checkbox" value="B"/>B</br>

以下のような serializeArray を使用すると、すべてがうまく機能します。A と B の両方がチェックされている場合、JSON.stringify は JSON を配列として正しく表します。

{"mycheckbox":["A","B"]}  

ただし、A のみをチェックした場合、JSON は配列として表されなくなります。

{"mycheckbox":"A"}  

処理中の RESTful バックエンドでは、一貫して配列として渡す必要があります。stringify を強制的に配列として表現する方法はありますか?

var jsonData = JSON.stringify($('form').serializeObject());

$.fn.serializeObject = function () {
    var o = {};
    var a = this.serializeArray();
    $.each(a, function () {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};
4

2 に答える 2

0

プラグインのコードを直接変更したくない場合は、後でオブジェクトを変更するだけです。

var formData = $('form').serializeObject(),
    mycheckboxVal = formData.mycheckbox;

if (!$.isArray(mycheckboxval)) {
    formData.mycheckbox = [mycheckboxval];
}

//then you serialize
var jsonData = JSON.stringify(formData);

必要に応じて、サーバー側で同じロジックを実行することもできます。

于 2013-11-05T00:39:19.067 に答える