Pregunta

Estoy tratando de publicar algunos datos construidos a partir de algunos elementos no forman pero parece que no puede descifrarlo.

¿Cómo puedo crear una matriz en el mismo formato que serializeArray() hace con campos de formulario?

He intentado varias variaciones sobre esto, pero sólo se recoge la última etiqueta .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);
}) 
¿Fue útil?

Solución

ok - se encuentra presente en el extremo, que funciona exactamente como si se tratara de campos de entrada con 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'
        }) 

}

Otros consejos

La adición de esta función a su código JS le permite serializar cualquier objeto con "nombre" y atributos "valor" .. Por lo general lo uso para serializar formas. Sé que dijiste estos controles son sin forma, pero me gustaría imaginar, esto podría ser utilizado para serializar cualquier objeto con un atributo de nombre / valor. También parece bastante fácil de cambiarlo a buscar otros atributos de un objeto, como ID. Es difícil decir exactamente lo que está haciendo allí, ya que no se presenta la definición de "datos" o el uso de los "valores"

    $.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;
    };

A continuación, sólo tiene que añadir a su cadena de URL

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

Si sólo está de paso un valor, que no es necesario para serializar.

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

A continuación, en process.php, acaba de obtener el valor de $ _ REQUEST [ 'datos'] y va a tener su ID

Mejor respuesta que he visto de Ob. y Guntram: jQuery serializar / serializeArray de un elemento que no es una forma

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

Además de las entradas, esta recoge seleccionar y área de texto. Dulce.

Con esta función se puede hacer cualquier conjunto de elementos serializable:

function makeSerializable(elem) {
  return $(elem).prop('elements', $('*', elem).andSelf().get());
}

A continuación, puede utilizar de esta manera:

var arr = makeSerializable('li.tag.active').serializeArray();

o

var $elem = $('li.tag.active');
var data = makeSerializable($elem).serialize();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top