我有几个文本输入的表单。
当用户点击此表单上的提交时 - 文本输入字段值被序列化并成为GET请求的参数
?param1+=26482¶m2=
我需要检查:如果参数没有值,则删除它。因此,只有带有值的参数才会附加到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;
}
}
答案 0 :(得分:4)
您可以使用以下js过滤表单,包括仅包含值的输入。
$(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);
}
顺便说一句,我会从基数中删除问题!