ASP.NET客户端脏表格处理

时间:2011-04-17 01:06:41

标签: jquery asp.net jquery-plugins

我一直在努力寻找解决此问题的最佳方法,这是警告用户ASP.NET网页表格即将导致数据丢失:

通过链接点击更改表单, - 打“回”, - 关闭浏览器

我希望在他们这样做时出现一个简单的对话框,让他们可以改变主意。如果他们这样做,那么表格仍然存在。如果他们不这样做,继续。

我已经尝试了几个jQuery插件来处理这个问题,目前我正在使用dirty_form。当我点击一个链接或尝试关闭窗口时它正在捕获脏表格并提醒我(它不会回来)。

不幸的是,处理脏的形式是不够的,因为我似乎无法做任何事情。我的代码:

<script type="text/javascript">
    $(document).ready(function () {
        $("#form2").dirty_form().dirty(function (event, data) {
            /*what here */
        });
    });
</script>

我如何设置它,以便如果他们选择前进,它会这样做,如果他们不这样做,它不会?

另外,如何捕获浏览器“Back”功能并以同样的方式处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

在这里关于SO的this问题回答,我在我们的应用程序中成功实现了这个dirty_form插件。这就是我们最终做的事情:

// A global variable to table any existing onbeforeunload event
var oldOnBeforeUnloadEvent;

// onDirty event that gets triggered by the plugin.. add visual cue to the user to show dirtiness 
function onDirty(event, data) {
    $("#form2 div.dirtyIndicator").addClass("redAsteriskBG");
}

// onClean event that gets triggered by the plugin.. remove the dirty indicator
function onClean(event, data) {
    $("#form2 div.dirtyIndicator").removeClass("redAsteriskBG");
}

// Check for presence of any inputs that are changed
function checkForDirtyElements() {
    var message = '';
    var dirtyElements = $('.myChangedClassName').length;
    if (dirtyElements > 0) {
        message += "IF YOU CONTINUE, ALL YOUR CHANGES WOULD BE LOST!";
    }
    return message;
}

// Our onbeforeunload event that does all the magic
function myOnBeforeUnload() {
    var message = checkForDirtyElements();
    if (message === '') {
        if (oldOnBeforeUnloadEvent !== null) {
            message = oldOnBeforeUnloadEvent();
        }
    }
    if (message.length > 0) {
        return message;
    }
}

$(document).ready(function () {
    // On page load set-up/initialize the dirty form with onDirty and onClean events
    $("#form2").dirty_form({
        changedClass: 'myChangedClassName'
    }).dirty(onDirty).clean(onClean);

    // Save the existing onbeforeunload event to a global variable and attach our custom onbeforeunload
    oldOnBeforeUnloadEvent = window.onbeforeunload;
    window.onbeforeunload = myOnBeforeUnload;
});