如何使用jQuery的form.serialize,但排除空字段

2022-08-30 05:33:26

我有一个搜索表单,其中包含许多通过GET提交的文本输入和下拉列表。我希望通过在执行搜索时从查询字符串中删除空字段来获得更干净的搜索URL。

var form = $("form");  
var serializedFormStr = form.serialize();  
// I'd like to remove inputs where value is '' or '.' here
window.location.href = '/search?' + serializedFormStr

任何想法,我如何使用jQuery做到这一点?


答案 1

我一直在查看jQuery文档,我认为我们可以使用选择器在一行中完成此操作:

$("#myForm :input[value!='']").serialize() // does the job!

显然,#myForm获取id为“myForm”的元素,但起初对我来说不太明显的是,#myForm和:input之间需要空格字符,因为它是后代运算符。

:input 匹配所有输入、文本区域、选择和按钮元素。

[value!=''] 是一个不等于筛选器的属性。奇怪(和有用)的事情是,所有:input元素类型都有值属性,甚至选择和复选框等。

最后,还要删除值为'.'的输入。(如问题中提到的):

$("#myForm :input[value!=''][value!='.']").serialize()

在这种情况下,并置,即放置两个属性选择器并排放置,意味着一个AND。使用逗号意味着一个OR。抱歉,如果这对CSS人来说是显而易见的!


答案 2

我无法让 Tom 的解决方案正常工作(?),但我能够使用一个简短的函数来识别空字段。我使用的是jQuery 2.1.1。.filter()

var formData = $("#formid :input")
    .filter(function(index, element) {
        return $(element).val() != '';
    })
    .serialize();