Javascript 有没有一种方法可以对AJAX表单执行类似于onbeforeunload的操作?

Javascript 有没有一种方法可以对AJAX表单执行类似于onbeforeunload的操作?,javascript,jquery,ajax,typescript,onbeforeunload,Javascript,Jquery,Ajax,Typescript,Onbeforeunload,不幸的是,我们现在的处境是,我们必须使用一个自制的、类似spa的引擎,它劫持所有导航,并通过ajax来实现 我正在寻找一种能够向表单添加标记的方法,可能如下所示: <form data-confirm-unsaved=""></form> 当然,我不能在卸载之前将事件绑定到表单。。。只有在窗口中,我才能获得一些关于如何进行此操作的线索 预期的结果是,当表单以除提交之外的任何方式卸载时,如果他们真的想这样做,则会显示一个确认信息。您可以使用MutationObserver

不幸的是,我们现在的处境是,我们必须使用一个自制的、类似spa的引擎,它劫持所有导航,并通过
ajax
来实现

我正在寻找一种能够向
表单添加标记的方法,可能如下所示:

<form data-confirm-unsaved=""></form>
当然,我不能在卸载之前将
事件绑定到
表单
。。。只有在
窗口中
,我才能获得一些关于如何进行此操作的线索


预期的结果是,当
表单
以除提交之外的任何方式卸载时,如果他们真的想这样做,则会显示一个确认信息。

您可以使用
MutationObserver
附加到
子列表
选项设置为
true
,位于
MutationEvent
,检查节点是否已删除


const form=document.getElementById(“表单”);
const observer=new MutationObserver(([{removedNodes}])=>{
if(removedNodes.length){
//如果从“document.body”中删除了“form”,则执行此操作`
checkRemovedNodes:for(removedNodes的常量节点){
如果(节点===形式){
log(`${node.tagName}#${node.id}已从文档`)中删除);
断开checkRemovedNodes;
}
}
}
});
//在'3000'毫秒内从'document'中删除'form'
观察者,观察者(文件主体{
儿童名单:对
});
setTimeout(()=>document.body.removeChild(form),3000);

预期结果是什么?我的第一个想法是对所谓的自制spa型引擎进行必要的更改-自制建议您拥有“源”代码-即未缩小、丑陋或模糊请参见编辑以获得预期结果,我可以修改自制引擎。“卸载”的定义是什么在问题的上下文中?unload=从DOM中删除,或者甚至删除DOM
$('[data-confirm-unsaved]').on('beforeunload', function (e) {
        let isUnload = true;
        let message = $(this).attr('[data-confirm-unsaved]');
        if (message == '')
            message = "This data is unsaved. Are you certain that you want to cancel?";

        if (isFormDirty($(this)))
            isUnload = confirm(message);

        if (isUnload)
            e.preventDefault();
    });