2010-03-03 4 views
11

Bonjour à tous, je suis en train d'activer des objets (en ajoutant la classe .active) et en désactivant "sur une page html avec des objets html, pas des formulaires. Et à chaque clic, je veux créer un tableau des éléments avec la classe .active mais je n'arrive pas à obtenir des résultats ?!sérialiser sans un formulaire?

est-ce dans le bon sens?

var data = $('li.tagToggle.active').serializeArray(); 
// li id format is 'id_0001' 
alert(data) 
$.post("/scripts/php/process.php",{ 
     'data[]': data, 
     funcName : 'tagResults', 
     tagResults : '1' 
}) 

garde alerte et fenêtre vide, mais quand je l'utiliser sur une forme, il saisit tous les objets avec la classe .active

tous les pointeurs sont les bienvenus!

Répondre

5

ok - GOT cela fonctionne, mais ses nots aussi propre que serialize()

function getTags(){ 

    var data = []; 

    $('li.tagToggle.active').each(function(){ 
     var me = $(this); 
     var id = me.attr("id").split('_'); 
     data.push(id[1]) 

    }); 

    $.post("/scripts/php/process.php",{ 
     'data': data, 
     funcName : 'tagResults', 
     tagResults : '1' 
    }) 

} 

pense qu'il ya une meilleure méthode?

+0

J'aime ça. data.push est une bonne solution pour construire l'objet, et être capable de le fusionner avec d'autres données que vous pourriez avoir à soumettre. –

+0

@daniel Veuillez vérifier ma réponse et envisager de l'accepter. – pepkin88

9

C'est ce que j'utilise

(function($){ 
$.fn.serializeAny = function() { 
    var ret = []; 
    $.each($(this).find(':input'), function() { 
     ret.push(encodeURIComponent(this.name) + "=" + encodeURIComponent($(this).val())); 
    }); 

    return ret.join("&").replace(/%20/g, "+"); 
} 
})(jQuery); 

pour l'utiliser dans votre cas $ ('li.tagToggle.active') serializeAny().

+3

Ce n'est pas une bonne réponse. Vous ne vérifiez pas si un élément a un nom de si c'est un bouton ou si c'est une case à cocher ou une radio. '.serializeArray' vérifie également si un élément est désactivé. Vous pouvez également utiliser '$ .param' pour paramétrer votre tableau. – pepkin88

+3

On pourrait facilement ajouter IF condition pour suffire tout ce dont il a besoin. Même si l'élément est désactivé, vous devez toujours l'envoyer au serveur. Enfin si c'est la case à cocher ou la radio, le .val() devrait toujours le gérer – fedmich

+0

Mais envoie aussi de la valeur quand il est décoché, donc il fonctionne mal. OP était intéressé par un effet de '.serialize' sur d'autres éléments que des formes, donc plus le' .serialize 'est similaire, mieux c'est. Votre fonction ne fait quasiment pas de filtres et vérifie en comparaison de ce que fait jQuery avec son '.serializeArray' et vous ajoutez un boilerplate, qui pourrait et devrait être géré par' $ .param'. Il semble seulement quelque peu compliqué, ce qui pourrait tromper les débutants en y pensant comme quelque chose de sûr.Eh bien, ce n'est pas sûr. C'est pourquoi j'ai downvoted votre réponse. – pepkin88

5

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.tagToggle.active').serializeArray(); 

ou

var $elem = $('li.tagToggle.active'); 
var data = makeSerializable($elem).serialize(); 
6

Vous pouvez sérialiser toutes les entrées à l'intérieur d'un élément comme celui-ci:

var data = $('YourId :input').serialize() 
+2

Colon est au mauvais endroit. Devrait être var data = $ ('YourId: input'). Serialize() –

1

au cas où quelqu'un trébuche sur cette question, ce lien est même question et la solution utilise jquery serialize

$('#divId :input').serialize(); 

dans ce cas

$('li.tagToggle.active :input').serialize(); 

lien à la question jQuery to serialize only elements within a div

Questions connexes