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

如果您使用 Johannes 建议的帖子,那么您应该将复选框中的 name 属性更改为“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 回答
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 回答