2011-05-09 46 views
1

可能重複:
Detecting Unsaved Changes using JavaScript是ASP.NET網頁髒

我的Web應用程序有3種網頁形式,我實現了我的webpage.I的驗證要實現isdirty功能。我想在用戶點擊登出(這是一個登錄狀態控件)時,如果窗體有任何更改,我的網頁上會彈出一個消息框。

環境: Asp.net VS2008 C#

回答

0

您可以輕鬆地設置彈出/模態窗口,當用戶試圖離開一個窗體/頁顯示向上。這裏有一個快速的純JavaScript示例,當您嘗試離開頁面時會顯示一條消息。

<body onunload="if (confirm('Save form ?')) { SaveFormMethod(); }"> 

如果您需要更好的示例,您應該提供更多詳細信息並向我們顯示您的代碼。

4

這可以很容易地用jQuery和onbeforeunload事件完成。使用.serialize()函數,您可以在頁面加載時計算返回字符串上表單的狀態,然後在onbeforeunload事件中計算表單的狀態。然後比較兩個值,如果它們不同,那麼表單中確實發生了變化。

例子:

<%@ Page Language="C#" %> 
<!DOCTYPE html> 
<html> 
<head id="Head1" runat="server"> 
    <title></title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script> 
    <script type="text/javascript"> 
     var data = ''; 
     $(function() { 
      data = $('form').serialize(); 
     }); 

     window.onbeforeunload = function() { 
      if ($('form').serialize() !== data) { 
       return 'You have unsaved changes. Are you sure you want to navigate away?'; 
      } 
     }; 
    </script> 
</head> 
<body> 
    <form id="Form1" runat="server"> 
     <asp:TextBox ID="FirstName" runat="server" /> 
     <asp:TextBox ID="LastName" runat="server" TextMode="MultiLine" /> 
     <asp:CheckBox ID="Chk" runat="server" /> 
     <asp:HyperLink ID="Link" runat="server" Text="Go to Google" NavigateUrl="http://www.google.com" /> 
    </form> 
</body> 
</html> 

一些其他技術(如在被投票決定關閉您的問題重複問題提出的)涉及認購的.change()事件輸入元素,但它們不太可靠因爲用戶可以在某些輸入字段中輸入abc,然後將其刪除,如果使用此技術,表單將被視爲髒,儘管沒有實際值發生更改。

+0

非常好,快速的實施。我不確定返回消息「您有未保存的更改」的用法是什麼。你確定要離開嗎?'因爲alerty信箱裏的信息總是'你想離開這個網站嗎?您所做的更改可能無法保存'....任何方式來更改此消息? – 2018-01-05 14:54:00

+0

明白了..消息無法更改..它由瀏覽器控制(在window.onbeforeunload文檔中提到)....感謝這篇文章 – 2018-01-05 15:22:32