2009-11-24 2 views
3

Сэн-парни, я занимаюсь некоторой работой, где у меня есть большая коллекция форм. Кажется, что они не «отправлены» традиционным способом (например, с помощью кнопки отправки). Мне нужен способ собрать все имена и значения всех данных формы при нажатии ссылки (document.location затем используется для перенаправления).JQuery получает все входные значения и создает массив (с именами)

Я хочу, чтобы имена остались нетронутыми, чтобы я мог использовать простой PHP-скрипт для работы с данными.

любые предложения?

ответ

7

Я мог бы предложить Serialize Form to JSON:

$.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; 
}; 

, а затем вы можете сделать:

var formArray = $("#myform").serializeObject(); 
0

Вы могли бы использовать что-то вроде моего представить помощника в качестве основы

function submit(form) { 
    var form = $(form); 
    $.ajax(
    { data: $.param(form.serializeArray()), 
     dataType:'script', 
     type:'post', 
     url: form.attr("action")}); 
} 

вместо «serializeArray()» Я хотел бы использовать «Serialize()» и вместо того, чтобы размещать его с помощью Ajax вы можете делать все, что вы хотеть.

Извините, у меня нет больше времени прямо сейчас, но, надеюсь, этот фрагмент поможет вам.

+0

Я думаю, что комбинация $ .param и form.serializeArray() - это ключ. не серализовать :). но я не уверен. – reto

0

cletus «s ответ является наилучшим с точки зрения Efficency.

Это, однако, еще один рабочий раствор, который не опирается на JSON:

//this is my object I will fill my array with 
function myObject(name, value) 
{ 
    this.name = name; 
    this.value = value; 
} 

var arr = $.map(
    $('span'), function (item) { 
     var $item = $(item); //no need to $(item) 2 times 
     return new 
     myObject(
      $item.attr("name"),  //name field 
      $item.text()   //value field 
     ); 
    } 
); 

arr будет массивом myObject, каждый из которых содержит name собственности и value недвижимости.

Используйте свой селектор вместо $('span').

1
$.fn.valuesArr = function() 
{ 
    var a = []; 
    jQuery.each(this, function(i, field){ 
     a.push($.trim(field.value)); 
    }); 
    return a; 
} 

ПРИМЕНЕНИЕ:

var myArr = $('input', $parentJQelem).valuesArr(); 
0

но все эти функции не работает имена массивов ведьмы в входах.

пример -

это правильно для отправить пост форму, но при сериализации я получить

вид [тип []]: 2

это не правильно - я нужен - вид [тип] []: 2

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