2013-11-18 4 views
0

У меня есть некоторые динамические формы с входами, какJQuery форма сериализации с массивом

<input type="text" name="admins[0]['email']"> 
<input type="text" name="admins[1]['email']"> 
<input type="text" name="admins[2]['email']"> 

И так далее. Когда я делаю .serializeArray(); на нем, они рассматриваются как разделенные, разные имена. Я хотел бы, чтобы результат был

admins 
| 
-->0 
| \-->email => value 
-->1 
| \-->email => value 
-->2 
    \-->email => value 

Таким образом, «админы» были бы единым массивом. Является ли это возможным? (Я передача данных через AJAX)

+0

Сделайте вывод 'serializeArray()' и настройте его в соответствии с вашими потребностями – shyam

+1

О, действительно :)))) – pie6k

+0

Да действительно :) http://jsfiddle.net/66A8p/ – shyam

ответ

1

Простой подход

var serializedArray = {}; 
$("input, textarea").each(function(i, el){ 
    var $field = $(this) 
    , rawName = $field.attr("name") 
    , matches = rawName.match(/^(.+?)\[\d+\]\['(.+)'\]$/) 
    , key 
    , subKey 
    , value = $field.val() 
    , subValue = {]} 
    ; 

    if(matches){ 

    if(!(key in serializedArray)){ 
     serializedArray[key] = []; 
    } 

    subValue[subKey] = value; 
    serializedArray[key].push(subValue); 

    } else { 
    serializedArray[rawName] = value; 

    } 
}); 
0

Вы можете использовать startsWith синтаксис jQuery.

var admins = new Array(); 
$("input[name^='admins']").each(function(i, val){ 
    // val ==> admins[0]['email'] 
    // $(this).val() ==> the value of the input 
    admins[i][val.substring(val.indexOf("'"), val.length-2);] 
}); 

Jquery startsWith selector.

Jquery each info.

Смежные вопросы