Есть ли способ использовать поля формы сериализации jQuery и обрезать значение в полях? - PullRequest
4 голосов
/ 20 октября 2008

У меня есть форма, которая использует jQuery для отправки сообщения ajax, и она сериализует отправленную форму. Код выглядит так:

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

Проблема здесь в том, что если у поля есть конечные пробелы, функция сериализации превратит эти пробелы в знаки плюс (+), когда они должны быть удалены.

Есть ли способ обрезать поля без , выполнив следующие действия:

$("#name").val( jQuery.trim( $("#name") ) );

Ответы [ 7 ]

10 голосов
/ 20 октября 2008

Вы можете попробовать пройтись по объекту и обрезать все.

//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);
6 голосов
/ 20 октября 2008

Обрезать все и значения элементов в DOM:

$('input, textarea').each(function(){
    $(this).val(jQuery.trim($(this).val()));
});
1 голос
/ 03 сентября 2009

Немного поздно, но это было, вероятно, то, что вы хотели:

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)
{
  ...
});
1 голос
/ 20 октября 2008

Вы можете зациклить все входы и обрезать перед отправкой.

$("input, textarea").each(function(){
   $(this).val(jQuery.trim($(this).val()));
});
0 голосов
/ 12 января 2009

Если вы используете ASP.NET, где вы можете иметь только одну форму на страницу, вы можете отправить только значения данного DIV следующим образом:

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

затем опубликуйте обновление следующим образом:

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

вспомогательные функции

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;
}
0 голосов
/ 20 октября 2008

Одна вещь, которую вы могли бы сделать, - это создать отдельную форму со скрытыми значениями и сохранить фактические, обрезанные значения формы в скрытых значениях при отправке пользователем, затем вы можете сериализовать «скрытую» форму и опубликовать ее. Просто идея.

0 голосов
/ 20 октября 2008

Ни одно из этих решений не работает, так как они фактически меняют поля формы на странице. Я просто хочу изменить значение поля, не меняя то, что набрал пользователь.

...