从请求 URL 中删除参数

remove parameters from request URL

本文关键字:删除 参数 URL 请求      更新时间:2023-09-26

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

请使用字段过滤,因为[value=""]选择器会检查输入的默认状态。

$('#form').on('submit', function() {
    $(':input', this).filter(function() {
        return this.value.length == 0;
    }).remove();
});​

演示:http://jsfiddle.net/bCskH/

更新:为了不删除输入字段,您可以简单地禁用它们:

$('#form').on('submit', function() {
    $(':input', this).filter(function() {
        return this.value.length == 0;
    }).prop('disabled', true);
});​

效果是一样的,但恕我直言,:)

演示:http://jsfiddle.net/bCskH/1/

您可以使用

jquery 选择器和serialize()仅选择具有值的输入这是示例

<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() 代替。看到这个链接,它说它已被弃用

[value=".."]访问未与当前值同步的属性。除此之外,您不能将选择器指定为上下文 - 因此#form移动到主选择器并使用.filter()将匹配的元素限制为空元素:

$('#form input').filter(function() {
    return !$(this).val();
});