Question

J'ai une forme qui est créée dynamiquement en utilisant ajax (les données pour les éléments de formulaire doit provenir d'une base de données) et je veux sérialiser les éléments du formulaire pour soumettre par ajax. Je teste actuellement un peu ma théorie en utilisant le code à partir du site de jQuery juste pour voir si je peux ramasser les éléments de formulaire et c'est là le problème réside:

$(document).ready(function() {
    $('#btnCustomSearch').live('click', function() {
            $('#results').html('');
            alert($('#customSearchTable :input').serializeArray());
            // get all the inputs into an array.
            var fields = $('#customSearchTable :input').serializeArray();
            jQuery.each(fields, function(i, field) {
                $("#results").append(field.name + " = " + field.value + ", ");
            });

            // now we'll reformat the data as we need

            // here we'll send the data via ajax

    });
});

Je dois apporter des modifications aux données avant la soumission et ce code n'est pas encore écrit, mais ce que je trouve est que tous les éléments d'entrée sur la page qui existaient au moment du chargement de la page sont ramassées correctement, tout éléments qui sont remplis en utilisant Javascript sont lus correctement, mais tout créé à l'aide ajax sont ignorés.

Je sais que cela est normalement résolu en utilisant « en direct », mais je ne suis pas clair quant à la façon de résoudre ce avec serializeArray(). En utilisant Ajax éléments de formulaire supplémentaires sont ajoutés à la #customSearchTable et ce sont ceux qui ne sont pas ramassés.

Toute aide très appréciée.

Merci

Était-ce utile?

La solution

Je vais exposer sur le commentaire un peu plus ici:

Lorsque vous appelez .serializeArray() il tourne en boucle à travers tout comme une soumission de <form> serait ou aussi près que possible de toute façon , pour obtenir les éléments à soumettre. La partie clé est ici :

.filter(function() {
  return this.name && !this.disabled &&
         (this.checked || rselectTextarea.test(this.nodeName) ||
         rinput.test(this.type));
})

Tout comme un <form> soumettre ne serait pas inclure des éléments sans name attribut , .filter() appel à l'aide this.name filtrera ces éléments de ceux à sérialiser.

Autres conseils

Pour quelqu'un d'autre qui trouve cela comme un « problème », s'il vous plaît noter que selon le commentaire de Nick Craver ci-dessus, tout ce qui est nécessaire est d'assurer que l'attribut « nom » est ajouté aux nouveaux éléments de formulaire qui sont créés dynamiquement. Ce résolu mon problème! Merci beaucoup en effet Nick!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top