84 votes

Comment modifier des données de formulaire sérialisées dans jQuery?

J'essaie de soumettre mon formulaire en AJAX, je dois donc sérialiser () les données. Mais j'utilise fckEditor et jQuery ne sait pas comment le gérer. Après la sérialisation, j'essaie de modifier manuellement la valeur, mais pas de chance jusqu'à présent ... aucune idée

 if(content_val!=""){
    var values = $("#frmblog").serialize();
    values.content = content_val; //content_val is the manually fetched data which I am trying to insert into the serialized content.
    alert(content_val); alert(values);
}
 

160voto

T.J. Crowder Points 285826

serialize renvoie une URL-encodé chaîne de caractères contenant les champs du formulaire. Si vous avez besoin d'ajouter, vous pouvez le faire en utilisant l'URL standard-chaîne codée règles, par exemple:

var values = $("#frmblog").serialize();
values += "&content=" + encodeURIComponent(content_val);

(Ci-dessus suppose que il y aura toujours une valeur en values après l' serialize appel; si ce n'est pas nécessairement vrai, déterminer s'il faut utiliser & basée sur le fait qu' values est vide avant d'ajouter.)

Alternativement, si vous le souhaitez, vous pouvez utiliser serializeArray , puis les ajouter dans le tableau et utiliser jQuery.param à son tour le résultat dans une chaîne de requête, mais cela semble un long chemin de ronde:

// You can also do this, but it seems a long way 'round
var values = $("#frmblog").serializeArray();
values.push({
    name: "content",
    value: content_val
});
values = jQuery.param(values);

Mise à jour: Dans un commentaire ajouté plus tard, vous avez dit:

Le problème est, il est certaines valeurs par défaut définies dans la clé "content" au cours de la serilization processus, donc je ne peux pas il suffit de fixer une nouvelle valeur, je dois mettre à jour celui déjà en elle"

Qui change les choses. C'est une douleur pour rechercher content au sein de la chaîne codée au format URL, donc j'irais avec le tableau:

var values, index;

// Get the parameters as an array
values = $("#frmblog").serializeArray();

// Find and replace `content` if there
for (index = 0; index < values.length; ++index) {
    if (values[index].name == "content") {
        values[index].value = content_val;
        break;
    }
}

// Add it if it wasn't there
if (index >= values.length) {
    values.push({
        name: "content",
        value: content_val
    });
}

// Convert to URL-encoded string
values = jQuery.param(values);

Vous auriez probablement envie de faire ce réutilisables fonction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X