繁体   English   中英

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

[英]Javascript event handler to execute after default behavior

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

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

类似但不足的 Stack Overflow 问题:

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

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

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

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

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

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

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

jsfiddle 演示

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

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

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

jsfiddle 演示

您可以改用事件冒泡:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM