Existe-t-il un moyen d'utiliser les champs de formulaire de sérialisation de jQuery et d'ajuster la valeur dans les champs?

StackOverflow https://stackoverflow.com/questions/218794

Question

J'ai un formulaire qui utilise jQuery pour soumettre une publication ajax et sérialise le formulaire envoyé. Le code ressemble à ceci:

var form = $("form");
var action = form.attr("action");
var serializedForm = form.serialize();
$.post(action, serializedForm, function(data)
{
  ...
});

Le problème ici est que si un champ comporte des espaces, les fonctions de sérialisation transforment ces espaces en signes plus (+), quand ils doivent être supprimés.

Existe-t-il un moyen de supprimer les champs sans procéder comme suit:

$("#name").val( jQuery.trim( $("#name") ) );
Était-ce utile?

La solution

Vous pouvez essayer de parcourir l’objet et de tout rogner.

//Serialize form as array
var serializedForm = form.serializeArray();
//trim values
for(var i =0, len = serializedForm.length;i<len;i++){
  serializedForm[i] = $.trim(serializedForm[i]);
}
//turn it into a string if you wish
serializedForm = $.param(serializedForm);

Autres conseils

Coupez tout < entrée > et < textarea > < / textarea > valeurs d'élément dans le DOM:

$('input, textarea').each(function(){
    $(this).val(jQuery.trim($(this).val()));
});

Vous pouvez effectuer une boucle sur toutes les entrées et couper avant de soumettre.

$("input, textarea").each(function(){
   $(this).val(jQuery.trim($(this).val()));
});

Un peu tard, mais c'était probablement ce que vous vouliez:

var form = $("form");
var action = form.attr("action");
var formArr = form. serializeArray();
jQuery.each(formArr , function(i, field) {
  formArr[i].value = $.trim(field.value);
});
var serializedForm = $.param(formArr);
$.post(action, serializedForm, function(data)
{
  ...
});

Aucune de ces solutions ne fonctionne, car elles modifient réellement les champs de formulaire de la page. Je veux juste modifier la valeur du champ sans changer ce que l'utilisateur a saisi.

Une chose que vous pouvez faire est d’avoir un formulaire séparé avec des valeurs cachées et de stocker les valeurs réelles et ajustées du formulaire dans les valeurs cachées lorsque l’utilisateur soumet. Vous pouvez alors sérialiser le & "masqué &". ; forme et poster que. Juste une idée.

Si vous utilisez ASP.NET où vous ne pouvez avoir qu'un seul formulaire par page, vous ne pouvez soumettre que les valeurs d'un DIV donné, comme suit:

var dataString = "source=contactDiv";
dataString += getDataString(divId, "input"); // add inputs
dataString += getDataString(divId, "select"); //add select elements

publiez ensuite la mise à jour comme suit:

$.post("UpdateContact.aspx",
        dataString,
        afterUpdate,
        "json");

fonctions d'assistance

function afterUpdate(data){
//add some post-update info
}

function getDataString(divId, tagName) {
    var data = "";
    var elements = $("#" + divId + " " + tagName);
    for (var i = 0; i < elements.length; i++) {
        var el = elements[i];
        var name = el.name;
        var value = $(el).val();
        if (value != null && value != "undefined")
            value = $.trim(value + ""); //added "" to fix IE 6 bug for empty select     
        if (el.type == "checkbox")
            value = el.checked;
        else if (el.type == "radio" && !el.checked)
            value = "";
        if (!(value == "" || value == "undefined" || name == "" || name == "undefined"))
            data += "&" + name + "=" + escape(value);
    }

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