如何防止表单元素发送一些我们不想要的字段?

时间:2010-07-11 14:22:02

标签: javascript jquery forms

我有一个表单元素,其中包含大约5个字段,最终查询将通过处理这些字段来创建。所以我想只向服务器发送最终查询,而不是所有这些查询。如何排除提交这些字段(使用jQuery)?

<form action="abc/def.aspx" method="get">
    <input type="text" name="field1" />
    <input type="text" name="field2" />
    <input type="text" name="field3" />
    <input type="text" name="field4" />
    <input type="text" name="field5" />
    <input type="hidden" name="final" />
    <input type="submit" value="Send" />
</form>

表单提交的输出如下所示:

abc/def.aspx?field1=val1&field2=val2&field3=val3&field4=val4&field5=val5&final=finalQuery

3 个答案:

答案 0 :(得分:18)

删除不希望提交给服务器的字段的名称属性。

<form action="abc/def.aspx" method="get">
    <input type="text" />
    <input type="text" />
    <input type="text" />
    <input type="text" />
    <input type="text" />
    <input type="hidden" name="final" />
    <input type="submit" value="Send" />
</form>

这是实现您想要的最简单的方法,它适用于所有主流浏览器。

W3规范谈到仅在存在名称时提交表单值:http://www.w3.org/TR/html401/interact/forms.html#h-17.2

答案 1 :(得分:10)

删除提交时的元素。

在onsubmit处理程序上:

$(formElement).submit(function() {
    $(this.field1).remove(); //removing field 1 from query
    return true; //send
});

禁用表单元素也会阻止它进入查询。(在Chrome上测试)

$(formElement).submit(function() {
    this.field1.disabled = true;
    return true; //send
});

答案 2 :(得分:0)

我认为最好的解决方案是处理提交,然后自己发送请求:

$(form).submit(function() {
    //do everything you need in here to get the final result
    var finalResult = alotoflogic();
    $.get("abc/def.aspx",final=finalResult, "callbackfunction", "responseType");
    return false;
});

应该完全按照你的意愿行事。 编辑:正如Alex指出的那样,这个解决方案不会将您发送到该页面,如果您需要转到可以执行的新页面,只需获取结果:

$(form).submit(function() {
    //do everything you need in here to get the final result
    var finalResult = alotoflogic();
    window.location('abc/def.aspx?final='+finalResult);
    return false;
});

这样浏览器就会重定向到该页面,只发送最终结果。