3

こんにちは私は以下のサンプルフォームを持っています

<form id="search" method="GET" action="/results">
    <input type="text" name="name">
    <input type="checkbox" name="rating" value="1">
    <input type="checkbox" name="rating" value="2">
    <input type="checkbox" name="rating" value="3">
    <input type="checkbox" name="rating" value="4">
    <input type="checkbox" name="rating" value="5">
    <input type="submit" value="Submit" name="submit">
</form>

いくつかの評価チェックボックスを選択してフォームを送信し、以下に示すようにJQuery serialize()を使用すると

$('#search').submit(function() {
    var $form = $(this);
    var strFormData = $form.serialize();
    //var objFormData = $form.serializeArray();
    //var strFormDataParamResult = $.param(objFormData);
});

このようなstrFormDataの例を取得します

"name=help&rating=1&rating=2&rating=3"

同じ名前のパラメータをこの結果に組み合わせる方法はありますか?

"name=help&rating=1,2,3" 

serializeArray()の結果を操作し、$。param(..)を使用しますか?

もしそうなら、誰かがこれの例を持っていますか?

助けてくれてありがとう。

4

2 に答える 2

1

これが最終的な私の解決策でした。serializeArrayとその方法でオブジェクトを操作することは少し複雑に見えました。以下はそれほど良くはありませんが、私が望むことを実行します。

    // Combine key=value pairs in escaped serialised form data that have the same key
    // example: "&rating=5&rating=4&rating=3" becomes "&rating=5,4,3"
    function combineSerialisedFormData(strEscapedSerialisedFormData) {
        var arrFormData = strEscapedSerialisedFormData.split("&");
        var dictCombinedKeys = {};
        for (var i = 0; i < arrFormData.length; i++) {
            var arrParam = arrFormData[i].split("=");
            var strKey = arrParam[0];
            var strValue = arrParam[1];

                         if (strKey !== "" && strValue !== "") {
            if (typeof (dictCombinedKeys[strKey]) === "undefined") {
                dictCombinedKeys[strKey] = strValue;
            }
            else {
                dictCombinedKeys[strKey] += "," + strValue;
            }
                        }
        }

        // { name : "help" , rating : "5,4,3,2,1,0", test : "" }
        // change this object into an array of key value pairs like this
        // ["name=help","rating=5,4,3,2,1,0","test="]
        var arrKeyValuePairs = [];
        for (var key in dictCombinedKeys) {
            if (dictCombinedKeys.hasOwnProperty(key)) {
                arrKeyValuePairs.push(key + "=" + dictCombinedKeys[key]);
            }
        }

        return arrKeyValuePairs.join("&");
    }
于 2012-06-06T13:52:38.200 に答える
1

投稿のヨハネス提案を使用する場合は、チェックボックスの名前属性を「rating[]」に変更する必要があります。

それ以外の場合、本当にGETでそれを行う必要がある場合は、これを試すことができます。

$('#search').submit(function() {
   var serialized = $(this).serialize(),
       ratings = '';

   $('#search input[type=checkbox]:checked').map(function(i, n) {
       ratings += (i ? ',' : '') + n.value;
   });

   serialized += '&rating='+ratings;

   ...

});
于 2012-06-06T10:56:30.763 に答える