【发布时间】:2010-12-19 21:08:23
【问题描述】:
嘿伙计们,我正在做一些我收集大量表格的工作。似乎这些不是“发布”的传统方式(即使用提交按钮)。单击链接时,我需要一种方法来收集所有表单数据的所有名称和值(然后使用 document.location 进行重定向)。
我希望名称保持不变,以便我可以使用简单的 PHP 脚本来处理数据。
有什么建议吗?
【问题讨论】:
标签: php javascript jquery forms
嘿伙计们,我正在做一些我收集大量表格的工作。似乎这些不是“发布”的传统方式(即使用提交按钮)。单击链接时,我需要一种方法来收集所有表单数据的所有名称和值(然后使用 document.location 进行重定向)。
我希望名称保持不变,以便我可以使用简单的 PHP 脚本来处理数据。
有什么建议吗?
【问题讨论】:
标签: php javascript jquery forms
我可以建议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();
【讨论】:
$.fn.valuesArr = function()
{
var a = [];
jQuery.each(this, function(i, field){
a.push($.trim(field.value));
});
return a;
}
使用:
var myArr = $('input', $parentJQelem).valuesArr();
【讨论】:
您可以使用我的提交助手之类的东西作为基础
function submit(form) {
var form = $(form);
$.ajax(
{ data: $.param( form.serializeArray()),
dataType:'script',
type:'post',
url: form.attr("action")});
}
我会使用 'serialize()' 而不是 'serializeArray()',而不是使用 ajax 发布它,你可以做任何你想做的事情。
对不起,现在没有更多时间,但希望这个 sn-p 可以帮助你。
【讨论】:
cletus 的回答在效率方面是最好的。
然而,这是另一个不依赖 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')。
【讨论】:
但是所有这些函数都不能在输入中使用数组名称。
示例 -
这对于提交表单是正确的,但是在序列化时我得到了
表格[类型[]]:2
这是不正确的 - 我需要 - form[type][]:2
【讨论】: