 <p>You need to fire the event on the form element itself, not on a jQuery selection. (In fact, you weren't even selecting the form element – inside <code>setTimeout</code>, <code>this</code> is the global object.)</p> <p>Cache a reference to the form (<code>this</code>) and call its <code>submit</code> method:</p> <pre><code>$('form').submit( function(event) { var formId = this.id, form = this; mySpecialFunction(formId); event.preventDefault(); setTimeout( function () { form.submit(); }, 300); }); </code></pre> <p>Note that I have also replaced your inefficient <code>$(this).attr('id')</code> call with <code>this.id</code>. Note also that you have to call the DOM form element's submit method, not the jQuery method, so that the jQuery event handler is not triggered, which would cause an infinite (and totally ineffectual) loop.</p>