Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ASP.Net LoadComplete事件是否在页面加载之前运行?_Javascript_Asp.net - Fatal编程技术网

Javascript ASP.Net LoadComplete事件是否在页面加载之前运行?

Javascript ASP.Net LoadComplete事件是否在页面加载之前运行?,javascript,asp.net,Javascript,Asp.net,加载页面时,我需要计算UTC时间的当前偏移量。我可以非常简单地通过javascript函数调用来实现这一点,作为页面主体onload事件的一部分,如下所示: <script type="text/javascript" language="javascript"> function getOffset() { var curUTCDate = new Date(); var iMins = curUTCDate.getTimezoneOffs

加载页面时,我需要计算UTC时间的当前偏移量。我可以非常简单地通过javascript函数调用来实现这一点,作为页面主体onload事件的一部分,如下所示:

<script type="text/javascript" language="javascript">

    function getOffset() {
        var curUTCDate = new Date();
        var iMins = curUTCDate.getTimezoneOffset();
        return iMins;
    }
</script>

<body id="bodymain" onload="javascript:document.forms[0]['hdnOffset'].value=getOffset();">
<form id="form1" runat="server">

    <input id="hdnOffset" runat="server"/>
    <asp:Label ID="lblText" runat="server"></asp:Label> 
但是,一旦页面完全呈现,偏移量就会变为可用,因为其值现在显示在输入框中。因此,在我看来,作为body onload事件的一部分调用的javascript似乎只有在页面完全加载之后才被调用


这怎么可能呢?

ASP.Net将在将HTML返回到浏览器之前完成对页面的处理,此时将调用onload函数

ASP.Net将在将HTML返回到浏览器(此时调用onload函数)之前完成对页面的处理

请参阅以下链接以了解页面生命周期


请参阅以下链接以了解页面生命周期


您在这里混淆了两个完全不同的“加载”事件

首先,服务器端代码(在您的例子中是ASP.NET)完整地运行。在这个周期中,会发生一些事情,其中包括
Load
LoadComplete
事件

当服务器确定应该呈现什么时,它开始向浏览器发送内容(通常是HTML和JavaScript)。在浏览器端,另一个
加载
事件被触发-页面上
元素的事件。它们的名字是一样的,但它们是完全独立的

要解决此问题,请在服务器端将
lblText.Text
设置为
“未设置值”
,并在更改偏移指示器时在JavaScript中进行更改

服务器端:

protected void Page_LoadComplete(object sender, EventArgs e)
{
    // Possibly even better to do this in the properties of the control...
    lblText.Text = "value not set...";
}
客户端:

<script type="text/javascript" language="javascript">
    function setOffset() {
        var curUTCDate = new Date();
        var iMins = curUTCDate.getTimezoneOffset();
        document.forms[0]['hdnOffset'].value = iMins;
        document.getElementById('lblText').innerHtml = 'value set';
    }
</script>

<body id="bodymain" onload="javascript:setOffset();">

函数setOffset(){
var curUTCDate=新日期();
var iMins=curUTCDate.getTimezoneOffset();
document.forms[0]['hdnOffset'].value=iMins;
document.getElementById('lblText')。innerHtml='value set';
}

如果您没有使用ASP.NET4,在ASP.NET4中,您可以对控件的客户端ID进行广泛的控制,那么您应该看看jQuery。这是一个javascript库,您可以将其用于无限量的内容,在这种特定情况下,这将使查找label控件变得更加容易。

您在这里混淆了两个完全不同的“加载”事件

首先,服务器端代码(在您的例子中是ASP.NET)完整地运行。在这个周期中,会发生一些事情,其中包括
Load
LoadComplete
事件

当服务器确定应该呈现什么时,它开始向浏览器发送内容(通常是HTML和JavaScript)。在浏览器端,另一个
加载
事件被触发-页面上
元素的事件。它们的名字是一样的,但它们是完全独立的

要解决此问题,请在服务器端将
lblText.Text
设置为
“未设置值”
,并在更改偏移指示器时在JavaScript中进行更改

服务器端:

protected void Page_LoadComplete(object sender, EventArgs e)
{
    // Possibly even better to do this in the properties of the control...
    lblText.Text = "value not set...";
}
客户端:

<script type="text/javascript" language="javascript">
    function setOffset() {
        var curUTCDate = new Date();
        var iMins = curUTCDate.getTimezoneOffset();
        document.forms[0]['hdnOffset'].value = iMins;
        document.getElementById('lblText').innerHtml = 'value set';
    }
</script>

<body id="bodymain" onload="javascript:setOffset();">

函数setOffset(){
var curUTCDate=新日期();
var iMins=curUTCDate.getTimezoneOffset();
document.forms[0]['hdnOffset'].value=iMins;
document.getElementById('lblText')。innerHtml='value set';
}

如果您没有使用ASP.NET4,在ASP.NET4中,您可以对控件的客户端ID进行广泛的控制,那么您应该看看jQuery。这是一个javascript库,您可以将其用于无限量的内容,在这种特定情况下,这将使查找label控件变得更加容易。

因为body onload事件发生在从服务器完全呈现页面之后的客户端。此时服务器上发生的唯一事件是
Unload
。如果希望在没有回发的情况下进行客户端到服务器的通信,则需要使用ajax。因为body onload事件发生在从服务器完全呈现页面之后的客户端。此时服务器上发生的唯一事件是
Unload
。如果您希望客户端到服务器的通信不需要回发,则需要使用ajax。但我可以理解,即使我在SaveStateComplete执行检查,该值也不可用。由于SavedStateComplete事件几乎是使用的最后一个事件,因此除了卸载之外,这意味着所有asp.net生命周期事件都发生在任何客户端加载事件之前。这是预期的行为吗?所有ASP.Net生命周期事件都已完成,然后呈现页面并发送给客户端。一旦浏览器接收并加载页面,javascript方法就会启动。我可以理解,即使我在SaveStateComplete执行检查,该值也不可用。由于SavedStateComplete事件几乎是使用的最后一个事件,因此除了卸载之外,这意味着所有asp.net生命周期事件都发生在任何客户端加载事件之前。这是预期的行为吗?所有ASP.Net生命周期事件都已完成,然后呈现页面并发送给客户端。一旦浏览器接收并加载页面,javascript方法就会启动。谢谢,非常好的解释。不幸的是,jQuery在这种情况下不起作用,因为我需要为各种不同的服务器端方法使用偏移量。我想我会加入一个后台工作人员来检查值何时可用,然后在服务器端使用它。谢谢,非常好的解释。不幸的是,jQuery在这种情况下不起作用,因为我需要为各种不同的服务器端方法使用偏移量。我想我只需要输入一个后台工作程序来检查值何时可用,并在服务器端使用它。