有没有办法使用jQuery的序列化表单字段并修剪字段中的值?

时间:2008-10-20 15:18:54

标签: jquery forms serialization trim

我有一个使用jQuery提交ajax帖子的表单,它序列化了发送的表单。代码如下所示:

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

这里的问题是,如果一个字段有尾随空格,那么当它们被剥离时,序列化函数会将这些空格转换为加号(+)。

有没有办法让字段修剪,不用执行以下操作:

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

8 个答案:

答案 0 :(得分:10)

您可以尝试循环浏览对象并修剪所有内容。

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

答案 1 :(得分:6)

修剪DOM中的所有&lt; input&gt; &lt; textarea&gt;&lt; / textarea&gt; 元素值:

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

答案 2 :(得分:1)

您可以在提交之前循环所有输入和修剪。

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

答案 3 :(得分:1)

有点晚了,但这可能是你想要的:

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

答案 4 :(得分:0)

这些解决方案都不起作用,因为它们实际上更改了页面上的表单字段。我只是想修改字段的值而不改变用户键入的内容。

答案 5 :(得分:0)

您可以做的一件事是拥有一个带有隐藏值的单独表单,并在用户提交时将实际的,修剪过的表单值存储在隐藏值中,然后您可以序列化“隐藏”表单并发布。只是一个想法。

答案 6 :(得分:0)

如果您使用的是每页只能有一个表单的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;
}

答案 7 :(得分:0)

如果您已经包含了jquery文件,请使用此脚本

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