Javascript 重写jQuery自定义事件

Javascript 重写jQuery自定义事件,javascript,jquery,Javascript,Jquery,下面的代码将把事件“传播”到我所有的js模块。这将在尝试从当前页面移开时触发。问题是,我不希望在提交表单时触发此操作(提交/取消/保存)。有办法检查吗 main.js: …想到的唯一方法是:在带有表单的页面中,当它处理webapp:page:closing事件时,如果它已提交表单(可通过页面中的变量跟踪),则不应阻止默认设置。在提交/保存/取消之前,您可以调用下面的代码,这将从所有侦听器中删除处理程序 $(window).off('webapp:page:closing'); 在“提交”窗体

下面的代码将把事件“传播”到我所有的js模块。这将在尝试从当前页面移开时触发。问题是,我不希望在提交表单时触发此操作(提交/取消/保存)。有办法检查吗

main.js:


想到的唯一方法是:在带有表单的页面中,当它处理
webapp:page:closing
事件时,如果它已提交表单(可通过页面中的变量跟踪),则不应阻止默认设置。

在提交/保存/取消之前,您可以调用下面的代码,这将从所有侦听器中删除处理程序

$(window).off('webapp:page:closing');

在“提交”窗体上,取消绑定事件:


$("#frm").submit(function(e) {
    $(window).off('beforeunload');
});

从MDN中:.off()方法删除与.on()连接的事件处理程序。

我喜欢这个小包装器。我可能得用那种东西。现在我使用一个队列系统,它的优点是处理程序不必检查事件是否已经被其他东西阻止了。(如上所述,如果您有多个处理程序阻止默认设置和设置
消息
,则最后一个处理程序获胜;对于我的处理程序,第一个处理程序获胜[其他处理程序不被调用]。但我不确定这有多重要。)我喜欢您的方法。是否有关于队列应如何工作的一般指示?谢天谢地,只有一个处理程序列表(我真的不应该把它称为队列),在卸载之前,真正的
处理程序会按顺序调用这些处理程序。尝试过了,但没有成功。事实上,它没有击中提交事件我的错误,我已经注释掉了一行,这是导致这不起作用。现在成功了,谢谢!我尝试过这种方法,但没有成功。我创建了一个名为form_submitted=false的全局变量;在('beforeunload')上。。。在触发自定义事件之前,我正在检查提交的表单是否为false。但这是在到达提交事件之前首先被击中的,所以我的bool变量总是错误的。我的错误是,我已经注释掉了一行导致这不起作用的代码。现在成功了,谢谢!我的错误是,我注释掉了一行导致此功能无法工作的代码。现在成功了,谢谢!

$("#frm").submit(function(e) {
    $(window).off('beforeunload');
});