<script language="javascript" type="text/javascript">
function pageLoad() {
ShowPopup();
}
</script>
上面的代码将在pageLoad()
上调用ShowPopup
。我需要ShowPopup
方法只在第一次工作
ie;
需要检查Page
的IsPostback
属性
我可以从客户端(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>