如何延迟提交表单

Chr*_*ris 14 jquery

在提交表单之前,我还有一个额外的功能要执行.这不是诀窍.

$('form').submit( function(event) {
    var formId = $(this).attr('id');
    mySpecialFunction(formId);

    event.preventDefault();

    setTimeout( function () { 
        $(this).submit();
    }, 300);

}); 
Run Code Online (Sandbox Code Playgroud)

这显然不起作用.

lon*_*day 34

您需要在表单元素本身上触发事件,而不是在jQuery选择上触发事件.(事实上​​,你甚至没有选择表单元素 - 在里面setTimeout,this是全局对象.)

缓存对form(this)的引用并调用其submit方法:

$('form').submit( function(event) {
    var formId = this.id,
        form = this;
    mySpecialFunction(formId);

    event.preventDefault();

    setTimeout( function () { 
        form.submit();
    }, 300);
}); 
Run Code Online (Sandbox Code Playgroud)

请注意,我还用你的低效$(this).attr('id')电话取代了this.id.另请注意,您必须调用DOM表单元素的提交方法,而不是jQuery方法,以便不触发jQuery事件处理程序,这将导致无限(并且完全无效)循环.

  • "提交不是一个功能"是因为我的提交按钮被命名为提交.更改固定按钮的名称.这很完美.谢谢! (3认同)