Используя serializeArray для неформальных объектов? - PullRequest
4 голосов
/ 20 сентября 2010

Я пытаюсь опубликовать некоторые данные, созданные из неформальных элементов, но я не могу их взломать.

Как создать массив в том же формате, что и 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 ]

6 голосов
/ 20 сентября 2010

хорошо - нашел это в конце, которое работает точно так же, как если бы это были поля ввода с 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'
        }) 

}
2 голосов
/ 20 сентября 2010

Добавление этой функции в ваш JS-код позволяет сериализовать любой объект с атрибутами «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;
    };

Затем просто добавьте его в строку URL

var dataToPassToAjax = 'allData=' + myObject.serializeObject();

Если вы передаете только ОДНО значение, вам не нужно сериализоваться.

$.post("/scripts/php/process.php",{ 'data': 'data=' + $('li.tag.active').id, funcName : 'tagResults' }). 

затем в process.php просто получите значение $ _ REQUEST ['data'] , и у него будет ваш идентификатор

1 голос
/ 03 сентября 2014

Лучший ответ, который я видел из Оби. и Гунтрам: jQuery serialize / serializeArray из элемента, который не является формой

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

В дополнение к вводам, это выбирает select и textarea. Сладкое.

0 голосов
/ 19 июля 2014

С помощью этой функции вы можете сделать любой набор элементов сериализуемым:

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();
...