Javascript创建自定义事件,返回false时取消
我想创建一个自定义事件,测试是否有注册的处理程序返回false,如果有,则取消操作 我有两种类型的对象,(一个或多个)页面和(一个)导航器 Navigator注册用户离开页面的尝试,但它不知道页面上有什么内容。页面对象知道页面的内容,但不知道用户何时尝试离开页面 我希望导航器向所有页面对象都可以侦听的beforepageleave事件发送消息,如果所有页面中的beforepageleave处理程序返回true,则导航器应继续其业务,但如果任何页面处理程序返回false,则应取消导航并停留在页面上 页面有一个hasChanges属性,如果该属性为true,则应该停止Navigator 因此,页面中的处理程序可以简化为:Javascript创建自定义事件,返回false时取消,javascript,jquery,cancellation,custom-events,Javascript,Jquery,Cancellation,Custom Events,我想创建一个自定义事件,测试是否有注册的处理程序返回false,如果有,则取消操作 我有两种类型的对象,(一个或多个)页面和(一个)导航器 Navigator注册用户离开页面的尝试,但它不知道页面上有什么内容。页面对象知道页面的内容,但不知道用户何时尝试离开页面 我希望导航器向所有页面对象都可以侦听的beforepageleave事件发送消息,如果所有页面中的beforepageleave处理程序返回true,则导航器应继续其业务,但如果任何页面处理程序返回false,则应取消导航并停留在页面上
navigator.on('beforepageleave', function (e) { return !this.hasChanges; });
导航器方法可以简化为如下所示:
leavePageLinks.click(function (e) {
let proceed = true;
$.each(registeredEventHandlers, function (index, handler) {
if (!handler(e)) {
proceed = false;
}
}
return proceed;
});
我已经看到jQuery将EventHandler保存在(jQuery.| data | jQuery.data)(elem,“events”)中,但我更喜欢使用非私有方法,而不是依赖可能在我不知情的情况下完全更改的代码。另外,我不确定我是否应该像这样覆盖处理