我有一个表单元素,其中包含大约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
答案 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;
});
这样浏览器就会重定向到该页面,只发送最终结果。