RunOnce for javascript On page Post back.?


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

上面的代码将在pageLoad()上调用ShowPopup。我需要ShowPopup方法只在第一次工作

ie;

需要检查PageIsPostback属性

我可以从客户端(JavaScript)做到这一点吗?

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

c#:

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

VB。净

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

您可以简单地利用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() {};
 }

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

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

你可以使用HTML5的本地存储-但不是所有的浏览器都支持。一个更好的主意是生成一个cookie,你可以像这篇文章中描述的那样检索:http://www.quirksmode.org/js/cookies.html

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

在后面的代码中,当post back发生时,调用下面的代码来注册javascript块。

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

,并在javascript中检查该变量的值以检测是否发生post back:

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

最新更新