Domanda

Sto cercando di inviare alcuni dati costruiti da alcuni elementi non-forma, ma io non riesco a crack.

Come posso creare un array nello stesso formato serializeArray() fa con i campi del modulo?

Ho provato diverse varianti su questo, ma raccoglie solo fino l'ultimo tag .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);
}) 
È stato utile?

Soluzione

ok - ha trovato questo, alla fine, che funziona esattamente come se si trattasse di campi di input 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'
        }) 

}

Altri suggerimenti

L'aggiunta di questa funzione per il codice JS permette di serializzare qualsiasi oggetto con "nome" e gli attributi "valore" .. Io di solito uso per forme serializzare. So che hai detto questi controlli sono senza forma, ma vorrei immaginare, questo potrebbe essere usato per serializzare qualsiasi oggetto con un attributo nome / valore. Sembra anche abbastanza facile da cambiare per cercare altri attributi di un oggetto, come ID. E 'difficile dire esattamente quello che stai facendo lì, come non si mostra la definizione di "dati" o l'utilizzo dei "valori"

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

Poi basta aggiungerlo alla stringa URL

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

Se sei solo di passaggio un valore, non è necessario per serializzare.

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

poi nel process.php, basta avere il valore di $ _ richiesta [ 'Dati'] e avrà il proprio ID

Miglior risposta che ho visto da Ob. e Guntram: jQuery serializzare / serializeArray da un elemento che non è una forma

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

Oltre agli ingressi, questo preleva selezionare e textarea. Dolce.

Con questa funzione è possibile effettuare qualsiasi insieme di elementi serializable:

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

Quindi è possibile utilizzare in questo modo:

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

o

var $elem = $('li.tag.active');
var data = makeSerializable($elem).serialize();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top