4

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

<form target="_blank" action="submit.php" onsubmit="doThisAfterSubmit()">
    <input type="submit" onclick="doThisAfterSubmit()" />
</form>

类似但不足的 Stack Overflow 问题:

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

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

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

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

4

2 回答 2

4

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

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

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

jsfiddle 演示

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

function doThisAfterSubmit(form) {
    setTimeout(function() {
        $(form).remove();
    }, 0);
};

现在表单在被删除之前被提交。

jsfiddle 演示

于 2013-06-13T02:05:31.593 回答
1

您可以改用事件冒泡:

<div onclick="this.remove();">
  <form target="_blank" action="submit.php" onsubmit="alert('submitted);">
    <input type="submit" />
  </form>
</div>
于 2017-06-19T21:27:04.070 回答