默认行为后执行的 Javascript 事件处理程序

km6*_*zla 5 javascript jquery events jquery-events

在 Javascript 中,如何附加事件处理程序以便它在默认操作后运行?

<form target="_blank" action="submit.php" onsubmit="doThisAfterSubmit()">
    <input type="submit" onclick="doThisAfterSubmit()" />
</form>
Run Code Online (Sandbox Code Playgroud)

类似但不充分的 Stack Overflow 问题:

javascript:可以添加在默认行为之后运行的事件处理程序吗?

如何在 JavaScript 中执行默认操作后捕获事件

我已阅读这些内容,但它们正在处理通过使用诸如keyupover之类的变体来解决的击键事件keypress。我见过的唯一其他解决方案是该setTimeout()方法。我想避免使用setTimeout()更优雅的解决方案(如果存在)。

我的用例是我想在提交后从 DOM 中删除表单。

Joh*_*n S 5

您可以自己执行默认操作,然后执行您想要的操作,然后阻止默认操作运行。

<form target="_blank" action="submit.php"
        onsubmit="this.submit(); doThisAfterSubmit(this); return false;">
    <input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

注意:调用this.submit()“onsubmit”不会像您想象的那样导致无限循环。

jsfiddle 演示

编辑:我原来的 jsfiddle 仅在表单提交后显示文本。我又试了一次,但将其更改为按照您想要的方式删除表单。这导致表单不再提交,即使是this.submit()首先调用的。在这种情况下,您可以setTimeout()延迟删除表单,直到原始线程完成执行,如下所示:

function doThisAfterSubmit(form) {
    setTimeout(function() {
        $(form).remove();
    }, 0);
};
Run Code Online (Sandbox Code Playgroud)

现在,表单在删除之前已提交。

jsfiddle 演示