Answers:
我一直在寻找jQuery文档,我认为我们可以使用选择器在一行中做到这一点:
$("#myForm :input[value!='']").serialize() // does the job!
显然,#myForm获得的元素的ID为“ myForm”,但起初对我而言不太明显的是#myForm和:input之间需要空格字符,因为它是后代运算符。
:input匹配所有输入,文本区域,选择和按钮元素。
[value!='']是一个属性不等于过滤器。奇怪的是(有用的)事情是:所有:input元素类型都具有value属性,甚至select和checkbox等。
最后,还要删除值为“。”的输入。(如问题中所述):
$("#myForm :input[value!=''][value!='.']").serialize()
在这种情况下,并置(即,两个属性选择器彼此相邻放置)表示AND。使用逗号表示“或”。抱歉,如果这对CSS员工来说是显而易见的!
$form.find(":input[value]")
-未选择空字段。这不起作用:$form.find(":input[value!='']")
-选择了所有字段。希望能对某人有所帮助。(jQuery 2.0.0)
$form.find(":input[value]")
也为我工作(jQuery 1.11.0)
value
属性已经存在时才起作用。否则它无法识别。
value
以编程方式进行设置将无法正常工作(value
不会作为HTML属性存在,但会作为输入中的数据属性存在)。在这种情况下,试试这个:$('#myForm :input').filter(function(i) { return ($(this).val().length != 0); }).serialize()
。编辑:刚看到里奇的答案相同的效果。
我无法获得Tom的解决方案(?),但是我可以通过.filter()
使用简短函数来识别空字段来实现此目的。我正在使用jQuery 2.1.1。
var formData = $("#formid :input")
.filter(function(index, element) {
return $(element).val() != '';
})
.serialize();
这对我有用:
data = $( "#my_form input").filter(function () {
return !!this.value;
}).serialize();
!!
重新输入为bool,您可以在控制台中尝试。!!('test')
,!!(5)
,!!(0)
input
选择器,应该有:input
包括选择等
data = $( "#my_form :input").filter(function () { return $(this).val() != ""; }).serialize();
您可以使用正则表达式...
var orig = $('#myForm').serialize();
var withoutEmpties = orig.replace(/[^&]+=\.?(?:&|$)/g, '')
测试用例:
orig = "a=&b=.&c=&d=.&e=";
new => ""
orig = "a=&b=bbb&c=.&d=ddd&e=";
new => "b=bbb&d=ddd&" // dunno if that trailing & is a problem or not
我已经使用了上述解决方案,但是对我来说这些没有用。所以我用下面的代码
$('#searchform').submit(function(){
var serializedData = $(this).serializeArray();
var query_str = '';
$.each(serializedData, function(i,data){
if($.trim(data['value'])){
query_str += (query_str == '') ? '?' + data['name'] + '=' + data['value'] : '&' + data['name'] + '=' + data['value'];
}
});
console.log(query_str);
return false;
});
可能对某人有用
$('#form').submit(function (e) {
e.preventDefault();
var query = $(this).serializeArray().filter(function (i) {
return i.value;
});
window.location.href = $(this).attr('action') + (query ? '?' + $.param(query) : '');
});
说明:
.submit()
钩住表单的submit
事件e.preventDefault()
阻止表单提交.serializeArray()
为我们提供了将要发送的查询字符串的数组表示形式。.filter()
删除该数组中的虚假(包括空)值。$.param(query)
创建更新后的数组的序列化且符合URL的表示形式window.location.href
发送请求
[value]
匹配具有value
present属性的任何元素,包括具有空值(或没有空值)的元素。这是由于早期jQuery版本中的一个错误导致在input[value]
和的某些变体之间出现不一致:input[value]
。举个例子来说,<input value="foo"><input value=""><input value><input>
; 该小提琴中说明了该错误。