Вопрос

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

Как я могу создать массив в том же формате, что и 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 позволяет сериализовать любой объект с атрибутами «Name» и «Value». Я обычно использую его для сериализации форм. Я знаю, что вы сказали, что эти элементы управления бесформены, но я представляю, это можно было бы использовать для сериализации любого объекта с атрибутом имени / значения. Он также выглядит достаточно легко, чтобы изменить его, чтобы искать другие атрибуты объекта, как идентификатор. Трудно точно сказать, что вы делаете там, поскольку вы не показываете определение «данные» или использование «значений»

    $.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' }). 

затем в процессе .php, просто получите значение $ _Request [«Данные» и у него будет ваш идентификатор

Лучший ответ, который я видел от OB. и оружие:jquery serialize / serializearray из элемента, который не является формой

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

В дополнение к входам это поднимает выбор и текстуарию. Милая.

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

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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top