离开页面时未保存表单时发出警报(重构)

时间:2018-06-26 09:37:29

标签: javascript jquery typescript

当用户在View中“未保存”表单时,我有提醒用户的代码

这是执行此操作的脚本

  import { __ } from "./translation";
export class Unsave {
    private unsaved: boolean = false;
    public register(): void {
        $(":button, :submit").on("click", () : void => {
            window.onbeforeunload = (): void => null;
        });
        $(":input" || ":checked").change(() => {
            this.unsaved = true;
        });
    }
    public unloadPage() : string {
        if (this.unsaved) {
            return __("Du har olagrade ändringar på den här sidan. Vill du lämna den här sidan och kasta bort dina ändringar eller stanna kvar på den här sidan?");
        }
    }

}

这是我在主脚本中的称呼方式

 const unsaveChecker = new Unsave();
unsaveChecker.register();
window.onbeforeunload = () => unsaveChecker.unloadPage();

我如何重构它以仅在主脚本中编写Unsave.***

1 个答案:

答案 0 :(得分:0)

我找到了一种重构代码的方法

这是代码

export class Unsave {
private static unsaved: boolean = false;
public static unsave_check(): void {
    $(":button, :submit").on("click", () : void => {
        window.onbeforeunload = (): void => null;
    });
    Unsave.unsaved = false;
    $(":input" || ":checked").change(() => {
        Unsave.unsaved = true;
    });
    window.onbeforeunload = (): string => this.unloadPage();
}
public static unloadPage() : string {
    if (Unsave.unsaved) {
        return __("Du har olagrade ändringar på den här sidan. Vill du lämna den här sidan och kasta bort dina ändringar eller stanna kvar på den här sidan?");
    }
}

}

然后在主脚本中添加

    Unsave.unsave_check();

更新

更多重构

您可以使用绑定/取消绑定功能

export class Unsave {
private static unsaved: boolean = false;
public static unsave_check(): void {
    $(":button, :submit").on("click", () : void => {
        $(window).unbind("beforeunload");
    });
    Unsave.unsaved = false;
    $(":input" || ":checked").change(() => {
        Unsave.unsaved = true;
    });
    $(window).bind("beforeunload", (): string => {
        return this.unloadPage();
    });
}
public static unloadPage() : string {
    if (Unsave.unsaved) {
        return __("Du har olagrade ändringar på den här sidan. Vill du lämna den här sidan och kasta bort dina ändringar eller stanna kvar på den här sidan?");
    }
}

}