我正在提交一份大表格。它有许多未指定值的字段,转换为field=&field2=&field3...
。
我不希望这些在GET网址中。仅保留具有非空值的字段。
我找到了一种用jquery做的方法:
$('#form').live('submit', function() {
$('input[value=""]', '#form').remove();
});
我认为它会完全符合我的要求。
但显然我错过了一些东西,因为这会选择并删除带有输入文本的input
,而不仅仅是空的。
上面的选择器(在remove()
之前)包含
<input type="text" class="input-medium" name="field1" id="field1" value>
,因此看起来好像没有设置值。有一个值设置,如确认
$('input[name="field1"]').val()
,正确返回屏幕上也可见的文字。
这是怎么回事?有什么想法吗?
使用jquery 1.7.2,Chrome 18.0.1025.168。
答案 0 :(得分:3)
请使用filtering个字段,因为[value=""]
选择器会检查输入的默认状态。
$('#form').on('submit', function() {
$(':input', this).filter(function() {
return this.value.length == 0;
}).remove();
});
DEMO: http://jsfiddle.net/bCskH/
更新:为了不删除输入字段,您只需将其停用即可:
$('#form').on('submit', function() {
$(':input', this).filter(function() {
return this.value.length == 0;
}).prop('disabled', true);
});
效果会一样,但恕我直言更好:)
答案 1 :(得分:2)
您可以使用jquery选择器和serialize()
来仅选择具有值的输入
这是example
<form id="test">
<input name="field1" value="Test"><br/>
<input name="field2" value=""><br/>
<input name="field3" value="value"><br/>
<input id="btn" type="button" value="submit"/>
</form>
$('#btn').on('click',function() {
alert($('#test input[value != ""]').serialize());
});
我也怀疑,.live()
将在jquery 1.7中使用.on()
代替。请参阅此link,并说它已被弃用
答案 2 :(得分:1)
[value=".."]
访问未与当前值同步的属性。除此之外,您不能将选择器指定为上下文 - 因此将#form
移动到主选择器中并使用.filter()
将匹配的元素限制为空的:
$('#form input').filter(function() {
return !$(this).val();
});