在表单提交jquery之前删除空值

时间:2014-10-20 12:37:47

标签: javascript jquery forms

我有几个文本输入的表单。

当用户点击此表单上的提交时 - 文本输入字段值被序列化并成为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 个答案:

答案 0 :(得分: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 :(得分: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);

答案 2 :(得分:0)

您需要的是:

var i = str.lastIndexOf("&");

所以

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

顺便说一句,我会从基数中删除问题!