2011-01-31 3 views
0

У меня есть несколько элементов div, и каждый из них имеет набор полей формы (текстовые входы и выбирает).jQuery - воспроизводить serialize()

Атрибут name Этот атрибут имеет атрибут rel, который имеет то же значение, что и имя.

Как я могу воспроизвести поведение сериализации jQuery (http://api.jquery.com/serialize/) в этих полях?

HTML, выглядит следующим образом:

<div> 
    <input type="text" rel="title" value="bla" /> 
    <input type="text" rel="count" value="5" /> 
    <select rel="page"> 
    <option value="home">home</option> 
    <option value="about" selected="selected">about</option> 
    <option value="404">404</option> 
    </select> 
    <input type="hidden" name="serialize_above_fields[]" value="" /> 
</div> 

<div> 
    <input type="text" rel="title" value="bla" /> 
    <input type="text" rel="count" value="5" /> 
    <select rel="page"> 
    <option value="home">home</option> 
    <option value="about" selected="selected">about</option> 
    <option value="404">404</option> 
    </select> 
    <input type="hidden" name="serialize_above_fields[]" value="" /> 
</div> 

... 

в основном я хочу, чтобы произвести скрытое поле ввода со всеми значениями полей внутри DIV он находится (и использовать REL в качестве ключей), как:

<input type="hidden" name="serialize_above_fields[]" value="title=bla&count=5&page=check2&page=about" /> 
+0

Дает им атрибут «имя» на короткое время вариант? –

+0

если добавив имя, я бы не получил их в $ _GET, да :) – Alex

ответ

2

Вы можете использовать утилиту jQuery map, чтобы сделать это довольно легко.

+0

это работает, спасибо! – Alex

+0

Слайк. Хороший ответ. – Dutchie432

2

Если входные элементы находятся в <form></form>, Вы могли бы попытаться сериализовать форму, используя что-то вроде этого:

$.fn.serializeObject = function() 
{ 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.rel]) { 
      if (!o[this.rel].push) { 
       o[this.rel] = [o[this.rel]]; 
      } 
      o[this.rel].push(this.value || ''); 
     } else { 
      o[this.rel] = this.value || ''; 
     } 
    }); 
    return o; 
}; 
+0

, но я не могу обернуть их внутри 'form', потому что у меня уже есть форма, содержащая все вышеперечисленное html – Alex

+0

Тогда, возможно, поместите их в div, и сериализовать div? Не 100% уверен, что это сработает - но это то, что я использовал для сериализации перед jQuery. – Dutchie432