RunOnce for javascript On page Post back。?

时间:2011-08-24 06:40:02

标签: javascript asp.net webpage page-lifecycle

<script language="javascript" type="text/javascript">
    function pageLoad() {

            ShowPopup();

     }
</script>

上述代码将在ShowPopup上致电pageLoad()。 我需要ShowPopup方法才能第一次使用

  

即;

需要检查IsPostback的{​​{1}}属性。

我可以从客户端(JavaScript)执行此操作。?

3 个答案:

答案 0 :(得分:2)

当然,您可以使用脚本标记将服务器端属性值注入标记:

C#:

if (<%=(!Page.IsPostBack).ToString() %>) ShowPopup();

VB.NET

if(<%=(Not Page.isPostBack).ToString().ToLower() %>) ShowPopup();

答案 1 :(得分:2)

您可以简单地利用JavaScript闭包并根据需要随时调用

function once(fn) {
    return function() {
        fn.apply(this, arguments);
        fn = function() {};
    }
}

function pageLoad() {
    if(bPostBack == null)
        ShowPopup();

} 

pageLoad = once(pageLoad);

这样,pageLoad函数只会在之后运行一次,它只执行一个空函数..

或者你可以稍微简化一下:

function pageLoad() {
    console.log("foo");
    pageLoad = function() {};
 }

(注意上面的一次函数更通用..但两者都做你需要的)

更新:如果您的页面重新加载,这显然不起作用,因为JavaScrip只是一次又一次地重新运行。在这种情况下,您需要设置一个cookie或一些其他可以检索的标志来检查弹出窗口是否已经显示..

你可以使用HTML5 Localstorage - 但是所有浏览器都不支持.. 更好的想法是生成一个可以像本文所述检索的cookie: http://www.quirksmode.org/js/cookies.html

答案 2 :(得分:1)

是的,你可以使用这样的javascript变量:

在您的代码背后,当发回消息时,请调用以下代码来注册javascript块。

ClientScript.RegisterClientScriptBlock(GetType(), "postbackFlag", "var bPostBack = true;", true);

并在你的javascript中检查此变量的值以检测回发的发生:

<script>
function pageLoad() {
    if(bPostBack == null)
        ShowPopup();

 }   
</script>