Как сериализовать как массив объектов из нескольких полей в JQuery? - PullRequest
0 голосов
/ 30 марта 2010

Я использую jQuery для динамического добавления новых div, содержащих несколько полей. Я добавляю новые мелодии в этом примере вывода:

<div id="uploadedTunes">
   <div class="tune">
     Title:<input type="text" name="Title">
     Length:<input type="text" name="Length"> 
   </div>
   <div class="tune">
     Title:<input type="text" name="Title">
     Length:<input type="text" name="Length"> 
   </div>
</div>

Есть ли способ сериализации только полей в div uploadedTunes (а не всей формы)? И как мне сериализовать это, чтобы у меня был такой массив:

uploadedTunes { мелодия { Название = "шоссе в ад", Длина = «3:01» } }

Спасибо за вашу помощь или подсказки!

Ответы [ 2 ]

2 голосов
/ 30 марта 2010

ДЕМО: http://jsbin.com/aneme/4/edit

включает jquery json lib

http://jquery -json.googlecode.com / файлы / jquery.json-1.3.min.js

$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name]) {
            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;
};


$(function() {  
  //define the array
  var tune = []; 
  //start looping
  $('#uploadedTunes .tune').each(function(i , e) { 
 //automatically add to each pair of tune elements an equal class name
   $(this).children().attr('class','tune_'+i);  
  //create and convert the array to JSON
  tune.push( $.toJSON( $('.tune_'+i).serializeObject() ) );
  });
  //join all tunes into one comma separated sting
  var uploadedTunes = tune.join(",");
  alert( uploadedTunes );
});

Примечание : Большинство людей думают, что serializeArray () работает только с FORM , это не совсем верно, это может работать и без формы, давая каждому элементу, который вы хотите, сериализовать один и тот же класс! затем сериализуйте этот класс вместо формы!

2 голосов
/ 30 марта 2010

Использовать serializeArray () для # uploadedTunes.

Например:

  jQuery.ajax({
    data : jQuery.param(jQuery(this).serializeArray()),
    dataType : 'script', 
    type:'post', 
    url:'/path/to/somewhere'
  }); 

Я не уверен, работает ли это на чем-то другом, кроме формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...