Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript创建自定义事件,返回false时取消_Javascript_Jquery_Cancellation_Custom Events - Fatal编程技术网

Javascript创建自定义事件,返回false时取消

Javascript创建自定义事件,返回false时取消,javascript,jquery,cancellation,custom-events,Javascript,Jquery,Cancellation,Custom Events,我想创建一个自定义事件,测试是否有注册的处理程序返回false,如果有,则取消操作 我有两种类型的对象,(一个或多个)页面和(一个)导航器 Navigator注册用户离开页面的尝试,但它不知道页面上有什么内容。页面对象知道页面的内容,但不知道用户何时尝试离开页面 我希望导航器向所有页面对象都可以侦听的beforepageleave事件发送消息,如果所有页面中的beforepageleave处理程序返回true,则导航器应继续其业务,但如果任何页面处理程序返回false,则应取消导航并停留在页面上

我想创建一个自定义事件,测试是否有注册的处理程序返回false,如果有,则取消操作

我有两种类型的对象,(一个或多个)页面和(一个)导航器

Navigator注册用户离开页面的尝试,但它不知道页面上有什么内容。页面对象知道页面的内容,但不知道用户何时尝试离开页面

我希望导航器向所有页面对象都可以侦听的beforepageleave事件发送消息,如果所有页面中的beforepageleave处理程序返回true,则导航器应继续其业务,但如果任何页面处理程序返回false,则应取消导航并停留在页面上

页面有一个hasChanges属性,如果该属性为true,则应该停止Navigator

因此,页面中的处理程序可以简化为:

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”)中,但我更喜欢使用非私有方法,而不是依赖可能在我不知情的情况下完全更改的代码。另外,我不确定我是否应该像这样覆盖处理