Question

Je suis en train de poster des données construites à partir de certains éléments non-forme, mais je ne peux pas sembler casser.

Comment puis-je créer un tableau dans le même format que serializeArray() fait avec des champs de formulaire?

J'ai essayé plusieurs variations sur cela, mais il ne capte que la dernière balise de .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);
}) 
Était-ce utile?

La solution

ok - trouvé cela à la fin qui fonctionne exactement comme si elle était des champs de saisie avec 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'
        }) 

}

Autres conseils

L'ajout de cette fonction à votre code JS vous permet de sérialiser un objet avec « nom » et attributs « valeur » .. Je l'utilise généralement à des formes de sérialisation. Je sais que vous avez dit ces contrôles sont informes, mais j'imagine, cela pourrait être utilisé pour sérialiser un objet avec un attribut nom / valeur. Il semble également assez facile de changer pour rechercher d'autres attributs d'un objet, comme ID. Il est difficile de dire exactement ce que vous faites là-bas que vous ne vous présentez pas à la définition de « données » ou l'utilisation des « valeurs »

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

Ensuite, il suffit d'ajouter à votre chaîne url

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

Si vous ne passez une valeur, vous ne avez pas besoin de sérialisation.

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

puis dans process.php, juste obtenir la valeur de $ _ REQUEST [ 'data'] et il aura votre ID

Meilleure réponse que j'ai vu de Ob. et Guntram: jQuery sérialisation / serializeArray à partir d'un élément qui ne soit pas une forme

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

En plus des entrées, ce choix Sélect.proc et textarea. Sweet.

Avec cette fonction, vous pouvez faire un ensemble d'éléments sérialisable:

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

Ensuite, vous pouvez l'utiliser comme ceci:

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

ou

var $elem = $('li.tag.active');
var data = makeSerializable($elem).serialize();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top