RegisterStartupScript(key, script) 等价于body.onload=f(){}里的内容?!

关于RegisterClientScriptBlock和RegisterStartupScript的区别,网上很多贴子是这么解释的:

这两个方法唯一的不同之处在于向“何处”注册脚本块。
         RegisterClientScriptBlock(key, script) 在 form开始处(紧接 <form runat="server"> 标识之后)发送脚本块      
         使用场景:                 一般不使用DOM元素
         RegisterStartupScript(key, script) 在 form结尾处(在 </form> 标识之前)发送脚本块,在document装载完成后会执行,等价于body.οnlοad=f(){}里的内容
         使用场景:                 一般 要使用DOM元素,比如:修改dom元素的值等
实验一下,我们发现:
RegisterClientScriptBlock(key, script) 在 form开始处(紧接 <form runat="server"> 标识之后)发送脚本块 
RegisterStartupScript(key, script) 在 form结尾处(在 </form> 标识之前)发送脚本块
这是这两个方法的区别。但问题是:
在 form结尾处(在 </form> 标识之前)发送脚本块,等价于body.οnlοad=f(){}里的内容吗?显然不是啊!
比如,
如果我们的DOM对象放在<form></form>之后,在body.onload中的JS函数,仍然是可以访问的,但放在
RegisterStartupScript(key, script) 仍然无法访问!
 
 
 
比如下面的页面结构:
 
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="1.aspx.cs" Inherits="rent._1" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function f() {
            alert(document.getElementById("spn1").innerText);
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
    <spn id="spn1">Span Text</spn>
</body>
</html>

用下面的方法扫行f(),JS是无法取得DOM对象spn1的:

protected void Page_Load(object sender, EventArgs e)

        {

            RegisterStartupScript("scr_login", "<script type=\"text/javascript\">f();</script>");

        }

    }

 

 

所以,结论是:

RegisterStartupScript(key, script) 并不等价于body.οnlοad=f(){}
 
 
关于RegisterClientScriptBlock和RegisterStartupScript的区别,只是前者被放在了<form>之后,
 
而后者放了在了</form>之前(能够访问form之前和form之中,但不能访问form之后的DOM对象),仅此而已!
 
 
最后,再讨论一个问题:脚本放在<body οnlοad="f1();">,和放在HTML文档最后面有区别吗?
 
放在<body οnlοad="f1();">中,要等到整个页面所有元素(包括所有图片)都加载完成之后才能执行,这时可以获取到页面上图片的尺寸。
放在HTML最后面,只要html文件加载并解析到最后就能执行,这时可以获取到页面上的元素,却不能获取到页面上图片的尺寸。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值