在表单提交前使用jQuery删除空值

4

我有一个带有多个文本输入框的表单。

当用户点击此表单上的提交按钮时,文本输入框中的值会被序列化并成为GET请求的参数,如下所示:

?param1+=26482&param2=

我需要检查:如果参数没有值,则将其删除。因此,只有带有值的参数将被附加到GET请求中。

应该如何实现?

我的提交函数

$("body").on('click','#form_submit_button', function(e){
    var form = $('#filter_form');
    change_url('?'+form.serialize());
});

function change_url(link)
{
    var IE = IE || 0;

    if (IE == 0) {
        var stateObj = { foo: "bar" };
        history.pushState(stateObj, "page 2", link);
    } else {
        location.href = link;
    }
}
3个回答

4
您可以使用以下JS来过滤您的表单,只包括具有值的输入框。 http://jsfiddle.net/63ux5ap9/
  $(document).ready(function () {
        $('#filter_form').submit(function () {
            var text = $(this).find(":input").filter(function () {
                return $.trim(this.value).length > 0
            }).serialize();
            console.log('text: ', text);
            return false;
        });
    });

在提交事件中使用+1而不是点击事件,并使用:input(你忘记在你的fiddle中包含jQuery库) - Brewal
"能工作,但不像应该的那样" 这是什么意思? - epascarello
@Brewal 我已经添加了jQuery库。谢谢你提醒我 :) - GibboK

1

jQuery $.fn.serialize$.param$.fn.serializeArray 方法的结合:

jQuery.fn.serialize = function () {
    return jQuery.param(this.serializeArray());
}

这意味着为了实现你想要的结果,你可以使用相同的方法并对serializeArray返回的结果数组进行额外的过滤:
var form = $('#filter_form'),
    params = $.param(form.serializeArray().filter(function(el) {
        return $.trim(el.value);
    }));

change_url('?' + params);

0
你需要的是什么:
var i = str.lastIndexOf("&");

所以

if(str.length <= str.lastIndexOf("=")) {
   var i = str.lastIndexOf("&");
   str = str.substring(0, i); 
}

顺便说一下,我会从基数中移除问题!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接