var canCloseWindow;        function CanCloseWindow() {
            if (canCloseWindow == "false") {
                window.event.returnValue = "报表正在生成中, 离开当前页面将影响页面的正常浏览.";
            }
        }<body onunload="CanCloseWindow()">
</body>
我有一页面需要在页面卸载之前去调用一个方法,
判断canCloseWindow状态 ,也就是判断当前页面能否被关闭或者刷新或者离开。
在.net后台如何控制canCloseWindow这个字段的状态呢。????
 

解决方案 »

  1.   

    与页面数据交互,使用隐藏域,
    后台变量var a="<%=a%>";
      

  2.   

    如何控制这个字段的状态可以展现出效果呢比如我刚开始点一个按钮的时候,canCloseWindow就设置为false,当这个按钮的事件处理完成后canCloseWindow就可以设置为true.也就是说此页面可以离开关闭或者刷新等等
      

  3.   

    <body onunload="CanCloseWindow()">
    </body>
    这个写错了
    应该是在onbeforeunload事件里。
      

  4.   

    var canCloseWindow=<%=canCloseWindow%>;// 这条语句用来获得后台值,再进行判断即可        function CanCloseWindow() {
                if (canCloseWindow == "false") {
                    window.event.returnValue = "报表正在生成中, 离开当前页面将影响页面的正常浏览.";
                }
            }<body onunload="CanCloseWindow()">
    </body>
      

  5.   


     ClientScript.RegisterStartupScript(GetType(), "CloseWin", "waiting_win='WaitingWin'; CloseWin();", true);
      

  6.   

    非哥你的意思就是在后台注册一个脚本为 canCloseWindow赋值对吧,
    可是我达不到效果,所以来问大家都是啥解决方案。。
      

  7.   

    你点击的按钮是同步提交还是异步提交?如果是同步的话,你这个JS事件根本不起作用;如果是JS异步提交的话,很好处理啊,提交前把canCloseWindow=false,异步返回成功后,再canCloseWindow=true
      

  8.   

    对啊,你说得很对,
    现在就是这么个情况 ,
    它需要等整个onclick事件全部处理完毕canCloseWindow才会被赋值。
    我以为直接改当时就会被赋值
    郁闷中。。
      

  9.   

    可是8楼的那位说得对啊
    因为我为canCloseWindow 赋值都
    是在同一个button的onclick里执行的只不过刚开始进入onclick时,canCloseWindow为false( 也就不能关闭)执行到事件的最后再把canCloseWindow设为true.
    可是现在只会等onclick全部执行完才会为canCloseWindow赋一遍值。
    就达不到效果
      

  10.   

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>    <script>
            var canCloseWindow = "true";        function CanCloseWindow() {
                alert(canCloseWindow);
                if (canCloseWindow == "false") {
                    window.event.returnValue = "报表正在生成中, 离开当前页面将影响页面的正常浏览.";
                }
            }   
        </script></head>
    <body onbeforeunload="CanCloseWindow()">
        <form id="form1" runat="server">
        <div>
            <asp:Button Text="Test" runat="server" ID="btnSubmit" OnClick="btnSubmit_Click" />
        </div>
        </form>
    </body>
    </html>
    ClientScript.RegisterStartupScript(GetType(), "close", "canCloseWindow='false';", true);
                System.Threading.Thread.Sleep(5000);
                ClientScript.RegisterStartupScript(GetType(), "open", "canCloseWindow='true';", true);
    就像我这段测试代码,运行后的html如下: 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head><title>
     
    </title>
     
        <script>
            var canCloseWindow = "true";
     
            function CanCloseWindow() {
                alert(canCloseWindow);
                if (canCloseWindow == "false") {
                    window.event.returnValue = "报表正在生成中, 离开当前页面将影响页面的正常浏览.";
                }
            }   
        </script>
     
    </head>
    <body onbeforeunload="CanCloseWindow()">
        <form name="form1" method="post" action="Default.aspx" id="form1">
    <div>
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMjA0OTM4MTAwNGRkZy2omh+nxtuUEbr2HiezVmBaiZc=" />
    </div>
     
    <div>
     
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgLc7/6cBALCi9reA9D03Odkhrs/y5xKbk5qLoKuBDyv" />
    </div>
        <div>
            <input type="submit" name="btnSubmit" value="Test" id="btnSubmit" />
        </div>
        
     
    <script type="text/javascript"> 
    //<![CDATA[
    canCloseWindow='false';canCloseWindow='true';//]]>
    </script>
    </form>
    </body>
    </html>
    本来我想的是走到这段代码的时候ClientScript.RegisterStartupScript(GetType(), "close", "canCloseWindow='false';", true); 当前页面就不能被关闭了。可是呢,它会继续把整个button的onclick事件执行完毕所以就把canCloseWindow给赋值为true,这样就达不到效果了。这该咋改改》
      

  11.   

    <asp:Button Text="Test" runat="server" ID="btnSubmit" OnClick="btnSubmit_Click" />=》<asp:Button Text="Test" runat="server" ID="btnSubmit" OnClientClick="canCloseWindow='false';" OnClick="btnSubmit_Click" />ClientScript.RegisterStartupScript(GetType(), "close", "canCloseWindow='false';", true);
                System.Threading.Thread.Sleep(5000);
                ClientScript.RegisterStartupScript(GetType(), "open", "canCloseWindow='true';", true);=>
                System.Threading.Thread.Sleep(5000);
                ClientScript.RegisterStartupScript(GetType(), "open", "canCloseWindow='true';", true);
      

  12.   

    囧啊。
    看样子对服务器端.aspx页面生成html这块我完成不熟悉
      

  13.   

    我现在测试用的是服务器端的button
    可是我项目中那个button是工具条里的
    像定义onclick只能在后台
    button.attribute.add();
    这下要加一个服务器端的onclick和一个客户端onclick
    这该怎么是好
      

  14.   

    OnClientClick = button.attribute.add
      

  15.   

    还有非哥,你那样改也有些不对。
    现在是我一点按钮就提示我是否离开页面。应该是点完按钮之后,在执行完onclick事件之前,如果用户离开页面才提示。
      

  16.   

    <script>
            var canCloseWindow = "true",isEnterButton;        function CanCloseWindow() {
                if (canCloseWindow == "false") {
                    window.event.returnValue = "报表正在生成中, 离开当前页面将影响页面的正常浏览.";
                }
                if(isEnterButton){
                    canCloseWindow='false';
                    isEnterButton='false';
                }
            }   
        </script>
      

  17.   

    OnClientClick="canCloseWindow='false';" =>OnClientClick="isEnterButton=true;" 
      

  18.   


    呵呵。这样也行。
    厉害。
    OnClientClick = button.attribute.add最后一个。
    这是啥意思呀?
    没见过,。。能写完整些 不
      

  19.   


    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>    <script>
            var canCloseWindow = document.getElementById("hdtxt").value;        function CanCloseWindow() {
                alert(canCloseWindow);
                if (canCloseWindow == "false") {
                    window.event.returnValue = "报表正在生成中, 离开当前页面将影响页面的正常浏览.";
                }
            }
           
            function ChangeValue()
            {
               if(document.getElementById("hdtxt"))
                   document.getElementById("hdtxt").value="false";
            }   
        </script>
        
    </head>
    <body onbeforeunload="CanCloseWindow()">
        <form id="form1" runat="server">
        <div>
            <input type="hidden" id="hdtxt" runat="server" value="true"/>
            <asp:Button Text="Test" runat="server" ID="btnSubmit" OnClick="btnSubmit_Click" OnClientClient="ChangeValue();" />
        </div>
        </form>
    </body>
    </html>
    protected void btnSubmit_Click(object sender,EventArgs e)
    {
       try
       {
          this.hdtxt.value="false";
         //... 
       }
       catch(Exception ex)
       {
         //...
       }
       finally
       {
          this.hdtxt.value="true";
       }
    }是这个意思吗?
      

  20.   

    OnClientClick 等价于 button.attribute.add("onclick", "do sth");
      

  21.   

    是这个意思。
    原来都有写两个方法
    OnClick="btnSubmit_Click" OnClientClient="ChangeValue();我当初也有弄一个隐藏字段,可是不是用onClientClick="ChangeValue()"而是用onclick。。
    估计就一直错,
    哎。要是在后台用button.attribute.add("onclick")这种方式添加方法的话。
    如何为一个button同时添加onclick,onclientClick
    ????
      

  22.   

    一个button一个onclick事件可以放两个方法不
    比如:button.attribute.add("onclick","funca();funcb();")
    如果可以的话,这两个方法的执行顺序是怎样的?
      

  23.   

    一个button一个onclick事件可以放两个方法不
    比如:button.attribute.add("onclick","funca();funcb();")
    如果可以的话,这两个方法的执行顺序是怎样的?-----------------------------------------------
    function func()
    {
      funca();
      funcb();
      ...方法N
    }button.attribute.add("onclick","func;")//这样随便你几个方法,都可以。
      

  24.   

    恩。。自己TEST,今后要学javascript
    。。太杯具了现在