我正在尝试发布一些从非形式元素构建的数据,但我似乎无法破解它。
如何使用与serializeArray()
格式相同的格式创建数组?
我已尝试了多种变体,但它只选取了最后一个.active
标记。
$('li.tag.active').each(function() {
values = {};
values['tagID'] = $(this).attr('id');
});
$.post("/scripts/php/process.php",{
'data': data,
funcName : 'tagResults'
},function(results){
$("#results").html(results);
})
答案 0 :(得分:6)
ok - 最后发现这个就像使用serializeArray()的输入字段一样......
function getTags(){
var data = new Array();
$('li.tag.active').each(function() {
data.push({ 'name':$(this).attr("name"), 'value':$(this).attr("id")});
});
$.post("/scripts/php/process.php",{
'data': data,
funcName : 'tagResults'
})
}
答案 1 :(得分:2)
将此函数添加到JS代码中允许您使用“name”和“value”属性序列化任何对象。我通常使用它来序列化表单。我知道你说这些控件是无形的,但我想,这可以用来序列化任何具有name / value属性的对象。它看起来也很容易改变它以寻找对象的其他属性,比如ID。由于您没有显示“数据”的定义或“值”的用法,因此很难准确说出您在那里做了什么
$.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 dataToPassToAjax = 'allData=' + myObject.serializeObject();
如果您只传递一个值,则无需序列化。
$.post("/scripts/php/process.php",{ 'data': 'data=' + $('li.tag.active').id, funcName : 'tagResults' }).
然后在process.php中,只需获取 $ _ REQUEST ['data'] 的值,它就会有你的ID
答案 2 :(得分:1)
我从Ob看到的最佳答案。和贡特拉姆: jQuery serialize / serializeArray from an element that is not a form
$('div :input').serializeArray()
除了输入之外,这还会选择select和textarea。甜。
答案 3 :(得分:0)
使用此功能,您可以将任何元素集串行化:
function makeSerializable(elem) {
return $(elem).prop('elements', $('*', elem).andSelf().get());
}
然后你可以像这样使用它:
var arr = makeSerializable('li.tag.active').serializeArray();
或
var $elem = $('li.tag.active');
var data = makeSerializable($elem).serialize();