2012-06-06 26 views
2

喜當結合相同的命名字段我有下面的例子形式使用JQuery serializeArray

<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序列化()如下圖所示

$('#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" 

有沒有辦法對任何PA結合公羊具有相同的名稱爲這個結果

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

通過操縱serializeArray()的結果,然後使用$ .PARAM(..)?

如果是的話,有沒有人有這樣的例子?

感謝您的任何幫助。

+0

爲什麼你想這樣做?在服務器端,你可以使用'$ _POST ['rating']'並且它擁有一個數組''1,2,3'' –

+1

我有一個特殊情況,結果將被傳遞給一個使用的包裝器映射函數替換並縮短URI。示例結果:?​​nm = help&ra = 1,2,3。在我的情況下,要求是縮短這些。 – Pricey

回答

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("&"); 
    } 
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; 

    ... 

}); 
+0

我的問題可能不太清楚,但我想爲「同名的任何參數」這樣做。我還提到了serializeArray(),因爲我認爲使用對象結果來處理它會更容易,而不是回顧表單中的特定元素,並從.serialize()修改字符串結果。 – Pricey