【发布时间】:2010-09-08 18:02:55
【问题描述】:
我需要运行 JavaScript 函数 onLoad(),但只有在页面第一次加载时才执行(即不是回发的结果)。
基本上,我需要在 JavaScript 中检查 IsPostBack。
谢谢。
【问题讨论】:
-
我编辑了这个问题,以反映 roman 原始问题的真实意图以及他选择接受的答案,因为对于这个问题所针对的平台存在一些混淆。
标签: asp.net javascript
我需要运行 JavaScript 函数 onLoad(),但只有在页面第一次加载时才执行(即不是回发的结果)。
基本上,我需要在 JavaScript 中检查 IsPostBack。
谢谢。
【问题讨论】:
标签: asp.net javascript
服务器端,写:
if(IsPostBack)
{
// NOTE: the following uses an overload of RegisterClientScriptBlock()
// that will surround our string with the needed script tags
ClientScript.RegisterClientScriptBlock(GetType(), "IsPostBack", "var isPostBack = true;", true);
}
然后,在为 onLoad 运行的脚本中,检查该变量是否存在:
if(isPostBack) {
// do your thing
}
你真的不需要设置变量,就像乔纳森的解决方案一样。客户端 if 语句可以正常工作,因为 "isPostBack" 变量将是未定义的,在该 if 语句中评估为 false。
【讨论】:
还有一种更简单的方法,无需在后面的代码中编写任何内容:只需将此行添加到您的 javascript:
if(<%=(Not Page.IsPostBack).ToString().ToLower()%>){//Your JavaScript goodies here}
或
if(<%=(Page.IsPostBack).ToString().ToLower()%>){//Your JavaScript goodies here}
【讨论】:
您好,请尝试以下...
function pageLoad (sender, args) {
alert (args._isPartialLoad);
}
结果是布尔值
【讨论】:
该解决方案对我不起作用,我不得不对其进行调整:
protected void Page_Load(object sender, EventArgs e)
{
string script;
if (IsPostBack)
{
script = "var isPostBack = true;";
}
else
{
script = "var isPostBack = false;";
}
Page.ClientScript.RegisterStartupScript(GetType(), "IsPostBack", script, true);
}
希望这会有所帮助。
【讨论】:
您可以在页面上放置一个隐藏的输入,并在页面加载后给它一个值。然后你可以检查那个字段,如果在post数据中就是postback,否则不是。
有两种使用服务器端代码(特定于 ASP.NET)作为响应发布的解决方案。我认为值得指出的是,该解决方案与技术无关,因为它仅使用客户端功能,所有主流浏览器都提供这些功能。
【讨论】:
试试这个,在这个 JS 中,我们可以检查它是否被回发,并相应地在相应的循环中执行操作。
window.onload = isPostBack;
function isPostBack() {
if (!document.getElementById('clientSideIsPostBack')) {
return false;
}
if (document.getElementById('clientSideIsPostBack').value == 'Y') {
***// DO ALL POST BACK RELATED WORK HERE***
return true;
}
else {
***// DO ALL INITIAL LOAD RELATED WORK HERE***
return false;
}
}
【讨论】:
您可以创建一个值为 0 的隐藏文本框。将 onLoad() 代码放在 if 块中,检查以确保隐藏文本框值为 0。如果它是执行代码并将文本框值设置为1.
【讨论】:
这里有很多选择。
对于纯 JS 解决方案,让您的页面提交给自身,但带有额外的 URL 参数 (mypage.html?postback=true) - 然后您可以使用 window.location.href 获取页面 url,并使用拆分或正则表达式来查找您的变量。
假设您发送回某种脚本语言来处理页面(php/perl/asp/cf 等),更简单的方法是让它们在页面中回显一行 javascript 设置变量:
<html>
<?php
if ($_POST['myVar']) {
//postback
echo '<script>var postingBack = true;</script>';
//Do other processing
} else {
echo '<script>var postingBack = false;</script>'
} ?>
<script>
function myLoader() {
if (postingBack == false) {
//Do stuff
}
}
<body onLoad="myLoader():"> ...
【讨论】:
这是一种方法(将其放在 Page_Load 中):
if (this.IsPostBack)
{
Page.ClientScript.RegisterStartupScript(this.GetType(),"PostbackKey","<script type='text/javascript'>var isPostBack = true;</script>");
}
然后在 JS 中检查该变量。
【讨论】:
在其中创建一个全局变量并应用该值
<script>
var isPostBack = <%=Convert.ToString(Page.IsPostBack).ToLower()%>;
</script>
然后你可以从其他地方引用它
【讨论】: