我的表单有一个需要使用POST和特定操作的主提交按钮,但我还有一些按钮需要使用GET和不同的操作提交表单。
我能看到这样做的唯一方法是使用jQuery .click()事件拦截提交并使用以下内容传递表单变量:
$('#btnClick').click(function (event) {
event.preventDefault;
input = $(':input');
window.location.href = '/action/?' + input;
return false;
})
这会产生一个混乱的查询字符串并暴露一些包含冗长数据的隐藏字段。使用jQuery截取表单提交和重新发送使用GET的最佳方法是什么?
顺便说一下,我用几个按钮定位不同的MVC GET Controller Actions,而主按钮使用POST来控制当前视图的Controller Action。
修改
虽然我还没有尝试过,但迈克提出了一个我没有想过的想法。我可以做类似的事情:
$("form").attr("action", "/action");
$("form").attr("method", "post");
或
$("form").attr("action", "/action");
$("form").attr("method", "get");
但后者仍然会暴露一些混乱的变量,主要是隐藏的领域。有没有办法在不手动操作查询字符串的情况下排除隐藏字段?
答案 0 :(得分:2)
最好禁用您不想要的字段,这样他们就不会提交,否则表单可以正常工作。因此,例如,默认情况下,您可以通过POST提交表单,但是您有另一个按钮#search
可以执行GET,但您想要排除某些元素:
$('#search').click(function (event) {
event.preventDefault;
$(this)
.parents("form")
.find("input.excludeOnSearch")
.prop("disabled", true)
.end()
.attr("method", "GET")
.submit();
})
答案 1 :(得分:1)
见这里:http://jsbin.com/cakov/1/edit?html,js,output
$("form").on("submit", function(e) {
var method = $("form").attr("method");
if(method === "POST") {
$("form").attr("method", "GET");
} else {
$("form").attr("method", "POST");
}
alert($("form").attr("method"));
return false;
});
此代码有效地执行切换并将http方法更改为,在这种情况下,与其相反。最终的退货声明取消了表格的提交。
我认为这就是你要问的问题?