从请求URL中删除参数

时间:2012-05-05 13:32:15

标签: javascript jquery html

我正在提交一份大表格。它有许多未指定值的字段,转换为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。

3 个答案:

答案 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);
});​

效果会一样,但恕我直言更好:)

DEMO: http://jsfiddle.net/bCskH/1/

答案 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();
});