Existe uma maneira de usar serialize campos do formulário do jQuery e aparar o valor nos campos?

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

Pergunta

Eu tenho um formulário que usa jQuery para enviar um posto ajax e ele serializa o formulário que é enviado para cima. Os olhares código como este:

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

O problema aqui é que se um campo à direita espaço em branco, a função serialize vai transformar esses espaços para sinais de mais (+), quando deveriam ser retiradas.

Existe uma maneira de obter os campos aparado sem fazendo o seguinte:

$("#name").val( jQuery.trim( $("#name") ) );
Foi útil?

Solução

Você poderia tentar looping através do objeto e aparar tudo.

//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);

Outras dicas

Cortar tudo e valores de elementos no DOM:

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

Você poderia loop sobre todas as entradas e aparar antes de enviar.

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

Um pouco tarde, mas esta foi provavelmente o que você queria:

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)
{
  ...
});

Nem daqueles soluções de trabalho, uma vez que eles realmente mudar os campos do formulário na página. Eu só quero modificar o valor do campo que, sem alterar o que o usuário digitou.

Uma coisa que você pode fazer é ter um formulário separado com valores ocultos, e armazenar os, aparado, valores do formulário reais nos valores escondidos quando os submete usuário, então você pode serializar a forma "escondida" e postar isso. Apenas uma idéia.

Se você estiver usando ASP.NET onde você pode ter apenas um formulário para cada página, você pode enviar apenas os valores de uma determinada DIV da seguinte forma:

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

, em seguida, postar a atualização da seguinte forma:

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

funções auxiliares

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top