我正在处理可能需要几秒钟才能提交的HTML表单。我想在提交之后禁用形式的某些字段。
我可以在表单submit
事件的处理程序中执行此操作,但这会在表单提交之前触发。如果我禁用了控件,那么它们的值不会包含在发送到服务器的后期数据中。
我尝试在我的处理程序中取消提交事件,从表单中删除我的submit
事件处理程序,通过JavaScript自己提交表单,然后禁用控件,但问题是我需要知道用户点击哪个按钮来提交表单。此信息以原始格式提交,但显然不是我手动触发的信息(因为没有点击按钮)。
我可以尝试将此信息复制到我的手动表单提交中,但有没有办法在表单提交后运行我的禁用代码?
答案 0 :(得分:12)
通过禁用提交按钮不允许进一步提交,您不需要执行任何其他操作。或者,隐藏表单并将其替换为旋转的内容,以便用户迷恋,认为发生了重要事情。
答案 1 :(得分:3)
提交表格后,您可以触发此功能:
function name() {
$("#target :input").attr("disabled", true);
return true;
}
此代码将禁用所有来自元素的字段,其中“target”为其id。
此版本只匹配所有输入元素:
function name() {
$("#target input").attr("disabled", true);
return true;
}
您必须包含jQuery库才能使用此代码。
答案 2 :(得分:2)
这与sp00m的答案几乎相同,只是它使用Javascripts本机提交来阻止递归调用。
$('#myForm').submit(function() {
this.submit();
disableFields(); // your own function
return false;
});
答案 3 :(得分:0)
您可以使用jQuery的.post()
提交,.button().click()
来检测点击了哪个按钮
.post()
在提交完成后需要执行的功能
答案 4 :(得分:-1)
您可以延迟执行操作,以便仅在提交提交后调用它们:
$('#myForm').submit(function() {
setTimeout(function() {
// Run disabling code here
}, 1);
return true;
}
setTimeout(fn, 1)
会将函数放在执行队列的末尾,以便在函数运行之前启动表单提交。
setTimeout
可以用于排队操作,有点像线程索引或z-index: