4

我正在尝试发布一些由一些非表单元素构建的数据,但我似乎无法破解它。

如何创建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);
}) 
4

4 回答 4

6

好的 - 最后发现它的工作原理就像它是带有 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'
        }) 

}
于 2010-09-20T16:19:46.993 回答
2

将此函数添加到您的 JS 代码中,您可以序列化具有“名称”和“值”属性的任何对象。我通常使用它来序列化表单。我知道你说这些控件是无形的,但我想,这可以用来序列化任何具有名称/值属性的对象。它看起来也很容易更改它以查找对象的其他属性,例如 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

于 2010-09-20T15:32:25.047 回答
1

我从 Ob 看到的最佳答案。和 Guntram: jQuery serialize / serializeArray 从一个不是表单的元素

$('div :input').serializeArray()

除了输入之外,它还会选择 select 和 textarea。甜的。

于 2014-09-03T18:58:34.137 回答
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();
于 2014-07-19T11:14:16.560 回答