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

Javascript event handler to execute after default behavior

本文关键字:之后 执行 默认 事件处理 程序 Javascript      更新时间:2023-09-26

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

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

类似但不充分的堆栈溢出问题:

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

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

我已经读过这些,但他们正在处理使用诸如keyup/keypress等变体解决的击键事件。我所见过的唯一其他解决方案是setTimeout()方法。我希望避免使用setTimeout(),如果存在的话,我希望使用更优雅的解决方案。

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

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

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

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

<<p> jsfiddle演示/strong>

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

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

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

<<p> jsfiddle演示/strong>

你可以用事件冒泡代替:

<div onclick="this.remove();">
  <form target="_blank" action="submit.php" onsubmit="alert('submitted);">
    <input type="submit" />
  </form>
</div>