如何在*表单提交事件后运行一些JavaScript *?

时间:2012-08-29 15:20:29

标签: javascript html forms

我正在处理可能需要几秒钟才能提交的HTML表单。我想在提交之后禁用形式的某些字段。

我可以在表单submit事件的处理程序中执行此操作,但这会在表单提交之前触发。如果我禁用了控件,那么它们的值不会包含在发送到服务器的后期数据中。

我尝试在我的处理程序中取消提交事件,从表单中删除我的submit事件处理程序,通过JavaScript自己提交表单,然后禁用控件,但问题是我需要知道用户点击哪个按钮来提交表单。此信息以原始格式提交,但显然不是我手动触发的信息(因为没有点击按钮)。

我可以尝试将此信息复制到我的手动表单提交中,但有没有办法在表单提交后运行我的禁用代码?

5 个答案:

答案 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:

StackOverflow: Why is setTimeout(fn, 0) sometimes useful?