2011-04-17 77 views
1

我一直在试图找到处理这个问题的最佳方法,这是提醒用户ASP.NET Web表单的即将到来的数据丢失,原因是:ASP.NET客户端脏表格处理

通过链接点击, -Hitting“后退”,

- 改变形式-Closing浏览器

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

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

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

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

如何设置此所以,如果他们选择继续前进,但它如果他们不这样做,是不?

另外,如何捕捉浏览器的“返回”功能,并以相同的方式处理它?

+0

请指出答案是否有帮助。谢谢 – 2011-04-18 11:35:04

回答

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; 
}); 
+0

我的应用程序目前不需要跟踪肮脏状态反转,所以我可能只是推出自己的。敬请关注。 – Michael 2011-04-28 02:34:20