【问题标题】:How do I check if dirty, but not when saving?如何检查是否脏,但保存时不检查?
【发布时间】:2013-11-12 18:51:31
【问题描述】:

我正在使用我在此处的另一篇文章中找到的一些代码,它运行良好,当您在保存更改之前尝试关闭页面时,它会提示您并询问您是否要留在页面上。问题是,如果单击保存按钮(带有回发的 asp 按钮),它会给您相同的消息。

所以我基本上需要停止它在保存按钮的回发中显示。

    var form_clean;

    // serialize clean form
    $(function () {
        form_clean = $("form").serialize();
    });

    // compare clean and dirty form before leaving
    window.onbeforeunload = function (e) {
        var form_dirty = $("form").serialize();
        if (form_clean != form_dirty) {
            return 'There is unsaved form data.';
        }
    };

【问题讨论】:

    标签: c# javascript jquery html asp.net


    【解决方案1】:

    我建议使用一个标志来表示您正在进行保存并且不应该应用该规则。像这样的:

    var form_clean;
    var checkDirty = true;
    
    //this should be called when the save button is clicked, but prior to the page post
    function onSave(){
        checkDirty = false;
    }
    
    window.onbeforeunload = function (e) {
        if(checkDirty){
            var form_dirty = $("form").serialize();
            if (form_clean != form_dirty) {
                return 'There is unsaved form data.';
            }
        }
    };
    

    我还建议您在 DOM 完全准备好后设置 form_clean 变量,这样可以确保您正在序列化正确的数据:

    $(document).ready(function(){ 
        form_clean = $("form").serialize(); 
    });
    

    一旦页面重新加载,该标志应该在回发后自动重置


    如果您在设置onSave 函数时需要帮助,可以使用这个:

    $("#mySubmitButtonID").click(function(){
        onSave();
    });
    

    【讨论】:

    • 好的,这是因为缺少序列化清理表单。
    • 现在有一个问题,每次我尝试离开页面时,即使我没有触摸任何东西,我都会收到消息,你知道为什么吗?
    • @connersz;我建议将 form_clean 设置为 DOM 就绪状态...例如 $(document).ready(function(){ form_clean = $("form").serialize(); });
    猜你喜欢
    • 2016-01-24
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多