如何实现web页面的提示保存功能

 Feed: 博客园
 Title: 如何实现web页面的提示保存功能
 Source: XML Lancer  Author: Lancer
0 Comments  
 
每每听到客户抱怨自己修改和很久的数据由于自己的一个误操作而丢失时,总想让web页面也有像window窗体一样具有提示保存的功能。
所以,经过一段时间的研究以后终于实现了这个功能!

============ checksave.js =======================
<!-- The JavaScript is used in show a message to prompt user to save data.-->
<script language="JScript">
function window::onbeforeunload(){
if (typeof(document.all['txtCheckFlag']) != "undefined") // to detect whether this page need prompt the save message!
{ if (event.clientY<0 && event.clientX>document.body.clientWidth-20
  || event.clientY<0 && event.clientX<20
  || event.altKey
  || event.clientY>document.body.clientHeight)
   event.returnValue="If you have modified some data, you need push the save button to save them./nDo you want to save?";
}
}
</script>
<script language=javascript>
<!--
 function checksave(arg){
if (typeof(document.all['txtCheckFlag']) != "undefined") // to detect whether this page need prompt the save message!
 {  // If need
  document.all["txtCheckFlag"].value=arg;
  document.forms(0).submit();
  return false;
 }
else // If does not need
 {
  window.location=arg;
  return true;
 }
}

function showsavemessage(arg)
{
if (window.confirm("Save Change?"))
 {
  document.all["txtSave"].value="1";
  document.forms(0).submit();
  return false;
 }
else
 {
  if (arg == ".")
   {
    return true;
   }
  else
   {
    window.location=arg;
    return false;
   }
 }
}
//-->
</script>

======== test.aspx ===============

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="test.aspx.vb" Inherits="Test.test" smartNavigation="True" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <title>test</title>
  <meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR">
  <meta content="Visual Basic 7.0" name="CODE_LANGUAGE">
  <meta content="JavaScript" name="vs_defaultClientScript">
  <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
  <!--#include file="checksave.js"-->
 </HEAD>
 <body MS_POSITIONING="GridLayout" οnlοad="pageload()">
  <form id="Form1" method="post" runat="server">
   <a οnclick="javascript:return checksave(this.href)" href="TestNoNeedCheck.aspx">sohu</a><BR>
   <a οnclick="javascript:return checksave(this.href)" href="TestNoNeedCheck.aspx">yahoo</a><BR>
   <a οnclick="javascript:return checksave(this.href)" href="TestNoNeedCheck.aspx">MTR</a>
   <asp:textbox id="txtCheckFlag" style="Z-INDEX: 101; LEFT: 213px; POSITION: absolute; TOP: 91px" runat="server"></asp:textbox><asp:textbox id="txtSave" style="Z-INDEX: 102; LEFT: 211px; POSITION: absolute; TOP: 139px" runat="server"></asp:textbox><asp:linkbutton id="LinkButton1" style="Z-INDEX: 103; LEFT: 150px; POSITION: absolute; TOP: 204px" runat="server">LinkButton</asp:linkbutton>
   <asp:Button id="Button1" style="Z-INDEX: 104; LEFT: 238px; POSITION: absolute; TOP: 271px" runat="server" Text="Button"></asp:Button></form>
 </body>
</HTML>

======== test.aspx.vb ===============
Public Class test
    Inherits System.Web.UI.Page
    Protected WithEvents txtSave As System.Web.UI.WebControls.TextBox
    Protected WithEvents LinkButton1 As System.Web.UI.WebControls.LinkButton
    Protected WithEvents Button1 As System.Web.UI.WebControls.Button
    Protected WithEvents txtCheckFlag As System.Web.UI.WebControls.TextBox

#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here
        txtSave.Style.Item("display") = "none"
        txtCheckFlag.Style.Item("display") = "none"
        LinkButton1.Attributes("onclick") = "javascript:return checksave(this.href)"
        '
        Page.RegisterStartupScript("Prompt", "<script language=""javascript"">function pageload() { }</script>")
    End Sub

    Private Sub txtCheckFlag_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCheckFlag.TextChanged
        Session("URL") = txtCheckFlag.Text
        If checkdata() Then
            'Session("Data") = Me.Data
            If InStr(txtCheckFlag.Text, "__doPostBack") > 0 Then
                Page.RegisterStartupScript("warning", "<script language=""javascript"">function pageload() {if (showsavemessage('.')) " + Session("URL") + ";}</script>")
            Else
                Page.RegisterStartupScript("warning", "<script language=""javascript"">function pageload() {showsavemessage('" + Session("URL") + "');}</script>")
            End If
        Else
            If InStr(txtCheckFlag.Text, "__doPostBack") > 0 Then
                Session("URL") = Replace(txtCheckFlag.Text, "javascript:", "")
                Page.RegisterStartupScript("warning", "<script language=""javascript"">function pageload() {" + Session("URL") + ";}</script>")
            Else
                If InStr(txtCheckFlag.Text, "javascript:") > 0 Then
                    Session("URL") = Replace(txtCheckFlag.Text, "javascript:", "")
                    Page.RegisterStartupScript("Redirect", "<script language=""javascript"">function pageload() {" + Session("URL") + ";}</script>")
                Else
                    Page.RegisterStartupScript("Redirect", "<script language=""javascript"">function pageload() {window.location='" + Session("URL") + "';}</script>")
                    Response.End()
                End If
            End If
        End If
    End Sub

    Private Sub txtSave_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSave.TextChanged
        If savedata() = False Then
            txtSave.Text = ""
            txtCheckFlag.Text = ""
            Exit Sub
        End If

        Me.ViewState("flag") = True
        If InStr(txtCheckFlag.Text, "__doPostBack") > 0 Then
            Page.RegisterStartupScript("TxtSave", "<script language=""javascript"">" + Session("URL") + "</script>")
        Else
            If InStr(txtCheckFlag.Text, "javascript:") > 0 Then
                Session("URL") = Replace(txtCheckFlag.Text, "javascript:", "")
                Page.RegisterStartupScript("TxtSave", "<script language=""javascript"">function pageload() {" + Session("URL") + ";}</script>")
            Else
                Page.RegisterStartupScript("Redirect", "<script language=""javascript"">function pageload() {window.location='" + Session("URL") + "';}</script>")
                'Response.Redirect(Session("URL"))
                'Response.End()
            End If
        End If
        txtSave.Text = ""
        txtCheckFlag.Text = ""
    End Sub

    Private Function checkdata() As Boolean
        'check whether user really had modified the data
        Return True
    End Function

    Private Function savedata() As Boolean
        'do save data here!
        Return True
    End Function

    Private Sub LinkButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton1.Click
        If Me.ViewState("flag") = True Then
            Page.RegisterStartupScript("Redict", "<script language=""javascript"">function pageload() {window.location='TestNoNeedCheck.aspx';}</script>")
        Else
            Page.RegisterStartupScript("Redict", "<script language=""javascript"">function pageload() {window.location='TestNoNeedCheck.aspx';}</script>")
        End If
    End Sub

End Class

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值