使用serializearray进行非形式的对象?
-
04-10-2019 - |
题
我正在尝试发布一些从某些非形式元素构建的数据,但我似乎无法破解它。
如何以与 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);
})
解决方案
好的 - 最终发现了它的工作原理,就像它是用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'
})
}
其他提示
将此函数添加到JS代码中,您可以序列化任何具有“名称”和“ 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;
};
然后只需将其添加到您的URL字符串中
var dataToPassToAjax = 'allData=' + myObject.serializeObject();
如果您仅通过一个值,则无需序列化。
$.post("/scripts/php/process.php",{ 'data': 'data=' + $('li.tag.active').id, funcName : 'tagResults' }).
然后在Process.php中,只需获得 $ _request ['data' 它将拥有您的ID
我从OB那里见过的最佳答案。和Guntram:jQuery serializize / serializearray从不是形式的元素中
$('div :input').serializeArray()
除输入外,这还可以选择Select和Textarea。甜的。
使用此函数,您可以使任何一组元素可序列化:
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();
不隶属于 StackOverflow